在默认情况下,spring上下文创建bean都是以单例的模式进行创建的,如果需要指定bean的作用域时,可以有下面4中选择
1、单例(singleton) : 在整个应用过程中,只会创建一个bean的实例
2、原型(Prototype) : 每次注入或通过spring上下文获取bean时,都会创建新的实例对象
3、会话(session) : 每次会话会创建唯一的bean实例
4、请求(request): 每次请求会创建唯一的bean实例
下面我们来指定bean的作用域
@Component
@Scope(value=ConfigurableBeanFactory.SCOPE_PROTOTYPE)//原型
@Scope(value=ConfigurableBeanFactory.SCOPE_SINGLETON)//单例
@Scope(value=WebApplicationContext.SCOPE_GLOBAL_SESSION,proxyMode=ScopedProxyMode.TARGET_CLASS)//会话
@Scope(value=WebApplicationContext.SCOPE_REQUEST,proxyMode=ScopedProxyMode.TARGET_CLASS)//请求
public class BeanActionScope {
}
此时,你可能注意到了,session、request和prototype、singleton相比,多了proxyMode属性,这个属性会为我们解决一些问题。
比如会面的一种场景:
一个会话bean需要被注入到一个单例bean中,此时会出现一个问题,可能此刻没用用户访问系统,那么会话bean并不存在。
proxyMode属性提供代理模式。解决问题。