spring bean的作用域
来源:互联网 发布:hotel california知乎 编辑:程序博客网 时间:2024/06/08 03:08
spring默认情况下:spring应用上下文的所有bean都是以单例形式创建的,也就是说一个bean在应用中只创建一次,不管是将真个bean注入到多少个其他bean中,注入的都是同一个bean。
存在的问题:单例的bean在某些情况下存在弊端。例如,在商城系统中每一个用户需要有一个购物车,比如叫cart。但如果cart是单例的,也就是说整个商城中所有的用户共用一辆购物车,这明显是不合理的。正确的做法是为每一个用户配一辆cart,也就是在Web应用中,为每一个会话创建一个cart。
那么spring是怎么实现的呢?
spring定义了多种作用域,基于这些作用域可以创建不同的bean:
- 单例(singleton):整个spring应用上下文,只创建一个bean实例
- 原型(propotype):每次注入或者通过spring应用上下文获取,创建一个bean
- 会话(session):web应用中,为每一个会话创建一个bean实例
- 请求(request):web应用中,为每一个请求创建一个bean实例
创建一个会话域的bean
主要利用@Scope注解
@Component@Scope( value=WebApplicationContext.SCOPE_SESSION, proxyMode=ScopedProxyMode.INTERFACES )public Cart cart{...}
将cart定义成一个session作用域的bean,这样在每一次会话中汇创建一个cart,做到一人一cart。
但用户希望使用一个cart时,spring不会将实际的cart bean注入给用户,他会把bean注入到一个cart的bean代理中。代理会将调用委托给会话作用域内真正的cart bean。
创建一个原型域的bean
两种方式,基于java代码和xml文件
@Component@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)public class Notepad { // the details of this class are inconsequential to this example}
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean class="com.myapp.Notepad" scope="prototype" /></beans>
0 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的作用域
- Android Camera2 API的ISO和对焦设置
- 《Java高并发程序设计》总结--2.Java并行程序基础
- HTTP全部报文首部字段
- ksvcreate: Process(m000) creation failed Fri Mar 03 05:35:31 2017
- Java的语句块
- spring bean的作用域
- Android APP性能调优工具 Systrace 的使用
- Win64 驱动内核编程-4.内核里操作字符串
- XIB选中底层的view,Xcode快速打开文件
- python sort、sorted高级排序技巧
- 深入浅出java入门 之 使用 Arrays 类操作 Java 中的数组
- Django学习
- 数据采集与埋点简介之 代码埋点、可视化埋点与无痕埋点
- 【问题分析】 为什么设置了android:windowIsTranslucent属性后Activity的退出动画就不生效了