当我们在定义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/
网友评论