Spring框架中有如下5种常见的bean作用域:
-
singleton(单例):默认作用域,每个spring容器只会创建一个bean实例,所有请求该bean的对象都会共享同一个实例。
-
prototype(原型):每次请求该bean时都会创建一个新的实例,每个请求都会得到一个新的实例。
-
request(请求):在一次HTTP请求中,每个bean实例都会被创建一次。该作用域只在使用Spring MVC Web应用时有效。
-
session(会话):在一次HTTP Session中,每个bean实例都会被创建一次。该作用域只在使用Spring MVC Web应用时有效。
-
global-session(全局会话):在portlet上下文中,全局会话作用域拥有与HTTP Session一样的生命周期,而且只对portlet上下文有效。
要指定bean的作用域,可以在bean定义中使用scope
属性,例如:
<bean id="myBean" class="com.example.MyBean" scope="prototype">
<!-- bean properties -->
</bean>
或者使用注解的方式指定作用域,例如:
@Component
@Scope("request")
public class MyRequestScopedBean {
// ...
}