spring-bean的作用域
2018-09-01 05:39:17来源:博客园 阅读 ()
1、spring定义了多种作用域,可以基于这些作用域创建bean:
- 单例(Singleton):在整个应用中,只创建一次bean实例
- 原型(Prototype):每次注入或者通过上下文获取bean时候,都会创建一个新的bean实例
- 会话(Session):在Web应用中,为每个会话创建一个bean实例
- 请求(Request):在Web应用中,为每个请求创建一个bean实例
2、配置bean作用域
- 基于注解
@Component @Scope("prototype") public class Person1 { //... }
- 基于XML
<bean id="person1" class="com.cn.pojo.Person1" scope="prototype"></bean>
3、单例作用域
在默认情况下,spring容器中的所有bean都是单例的。单例的bean如果需要保持一些状态,那么重用是不安全,因为对象会被污染。
4、原型作用域
5、会话作用域
在典型的电子商务系统中,可能会有一个bean代表用户的购物车,如果购物车是单例的话,那么将会导致所有的用户都向同一个购物车中添加商品;如果购物车是原型的话,那么在应用的某个地方向购物车添加了商品,在应用给的另外一个地方可能就不可用了,因为注入的是原型作用域的购物车。此时,会话作用域最合适。
@Component @Scope(value = "session",//作用域为会话,spring会为应用中的每个会话创建一个cart
proxyMode = ScopedProxyMode.INTERFACES)//指定了代理模式 public class Cart { //... }
proxyMode 的值由枚举类指定了可选范围:
public enum ScopedProxyMode { DEFAULT, NO, INTERFACES, //代理接口 TARGET_CLASS; //基于CGLisb生成基于类的代理 private ScopedProxyMode() { } }
Cart应用到下面类中
@Component public class StoreService { @Autowired private Cart cart; //... }
在web应用中StoreService 是单例的,Cart是会话的,StoreService 中注入了Cart。
实际上由于proxyMode的作用,并不是直接注入了Cart bean,而是会注入一个到Cart bean的代理。这个代理会暴露Cart相同的方法,所以StoreService 会认为它是一个购物车。当StoreService 调用Cart的方法时,代理会对其进行蓝解析并将调用委托给会话作用域内真正的Cart bean
6、请求作用域
与会话作用域一样通过作用域代理的方式使用
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Spring系列.ApplicationContext接口 2020-06-11
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- 给你一份超详细 Spring Boot 知识清单 2020-06-11
- SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 2020-06-11
- 掌握SpringBoot-2.3的容器探针:实战篇 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash