Spring速查手册(二)——Bean的作用域
来源:互联网 发布:云计算技术专业 编辑:程序博客网 时间:2024/06/08 20:01
Bean的四种作用域
- 单例(Singleton):整个应用中,只创建一个bean。
- 原型(Prototype):每次注入或请求要给bean的时候都创建一个新的bean。
- 会话(Session):每个session创建要给bean。
- 请求(Request):每个WEB请求创建一个bean。
PS:Spring默认的bean是单例的!
使用会话/请求作用域的注意点
// 创建一个session的bean@Component@Scope(value=WebApplicationContext.SCOPE_SESSION)public A a{ …… }// 在单例bean中注入不同作用域的bean@Componentpublic B b{ @Autowired public void setA ( A a ) { …… }}
上述代码会发生错误!
单例的bean在应用程序启动的时候就初始化,并在初始化时需要注入session作用域的B,但session作用域的bean只有当有用户的时候才创建,初始化的时候并没有该对象。
再者,不同的用户拥有不同的session,因此A对象将有成千上万,而B对象有且仅有一个。
此时需要在session作用域的bean对象上加上注解:
// 创建一个session的bean@Component@Scope(value=WebApplicationContext.SCOPE_SESSION,proxyMode=ScopeProxyMode.INTERFACES)public A a{ …… }
该注解声明后,注入给单例的将是该bean的代理,代理维护着不同session下的bean,当单例对象调用的将是代理对象,代理对象根据当前的session将请求转发给制定的目标对象处理。
注意:若session作用域的对象无接口,则使用Cglib创建代理
// 创建一个session的bean@Component@Scope(value=WebApplicationContext.SCOPE_SESSION,proxyMode=ScopeProxyMode.TARGET_CLASS)public A a{ …… }
在XML中开启对象代理
<!-- 开启java动态代理--><bean id="xxx" class="com.xxx.xxx" scope="session"> <aop:scoped-proxy /></bean>
<!-- 开启Cglib代理--><bean id="xxx" class="com.xxx.xxx" scope="session"> <aop:scoped-proxy proxy-target-class="false" /></bean>
1 0
- Spring速查手册(二)——Bean的作用域
- Spring速查手册——Bean装配
- spring—bean的作用域
- Spring学习笔记(二)Bean的作用域
- spring笔记——bean的作用域
- (五)Spring框架——Bean的作用域
- Spring实战学习笔记——bean的作用域
- spring bean的作用域
- spring bean的作用域
- Spring---->Bean的作用域
- spring bean的作用域
- spring bean的作用域
- spring bean 的作用域
- spring bean的作用域
- Spring Bean的作用域
- Spring Bean的作用域
- Spring Bean的作用域
- Spring bean的作用域
- vi/vim命令模式和编辑模式各种操作
- HDOJ--2700 Parity
- 腾讯云CentOS6.5下安装mysql,并配置好远程访问等权限,途中遇到的问题
- 30 Examples For Awk Command In Text Processing
- ie8不兼容的一些方法兼容实现
- Spring速查手册(二)——Bean的作用域
- MySQL查询优化小结
- HDU 2191 多重背包的二进制实现
- 【Java多线程】基础线程的等待与唤醒
- 解决同一个页面有多个datatable的显示重叠Begin,不兼容问题
- JAVA中使用IO流实现大文件的分裂与合并
- 友谊随笔——你是人间四月天(竹)
- socket 使用
- 学习笔记: 源码 blob.cpp 初见