Spring作用域

当我们在定义Bean的时候,不仅可以设置它的值,而且可以设置它的作用域(scope)。

scope种类

Spring bean的scope有这么几种:

  • singleton: (Default) Single bean definition for a single object instance per container. 在这个spring container里面,这个bean只有一个实例。这种bean主要用在stateless beans的情况。(个人理解:像是设置一些静态常量,可以全局使用。)

  • prototype: Single bean definition for multiple instances. 每次我们用ApplicationContext去call getBean()的时候,spring container就会创建一个新的实例。所以每个request都会创建一个新的这个bean的实例。这种bean主要用在stateful beans的情况。(个人理解:在server-client模型中,server要处理从client来的很多request,而且server希望知道每个request的信息,像是request的context,所以需要prototype。)

  • request: Single bean definition for a single HTTP request.

  • session: Single bean definition for the HTTP session.

  • globalSession: Single bean definition for the global HTTP session. Typically only valid when used in portlet context.

  • application: Single bean definition for the entire application bound to the lifecycle of a ServletContext

在多数情况,我们只会使用singleton和prototype两种scope,如果在spring配置文件内未指定scope属性,默认为singleton。Request, session and application只有在the context of a web-aware ApplicationContext(web应用)才有效。

scope设置

可以用@scope来设置。


reference: https://memorynotfound.com/spring-bean-scopes-singleton-vs-prototype/

你可能感兴趣的:(Spring作用域)