笔记5 bean的作用域
1. Spring定义了多种作用域,可以基于这些作用域创建bean,包括:
- 单例(Singleton):在整个应用中,只创建bean的一个实例。(默认)
- 原型(Prototype):每次注入或者通过Spring应用上下文获取的 时候,都会创建一个新的bean实例。
<1>如果使用组件扫描来发现和声明bean,那么可以在bean的 类上使用@Scope注解,将其声明为原型bean:
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE )或者@Scope("prototype")
<2>如果想在Java配置中声明原型bean,那么可以组合使 用@Scope和@Bean来指定所需的作用域。
<3>如果使用XML来配置bean的话,可以使用<bean>元素的 scope属性来设置作用域
- 会话(Session):在Web应用中,为每个会话创建一个bean实例。
- 请求(Request): 在Web应用中,为每个请求创建一个bean实例。
购物车bean设置为会话作用域,使用@Scope注解:@Scope(value=WebApplicationContext.SCOPE_SESSION,proxyMode=ScopedProxyMode.INTERFACES)
电子商务应用中,当用户进入系统后,创建了相应的会话后,购物车实例才会产生,而且系统中会有多个购物车的实例,每个用户一个。系统中还有一个专门处理购物车的实例StoreService(将购物车对象传入,然后进行处理),它是一个单例的bean,会在Spring应用上下文加载的时候创建。这时会产生一个问题,当创建这个StoreServices时,Spring会试图将购物车bean注入到StoreService中,但此时购物车bean是会话作用域的,此时并不存在。所以,期望是当StoreService处理购物车功能时,它所使用的购物车实例恰好时当前会话所对应的那一个。Spring并不会将实际的购物车bean注入到StoreService中, Spring会注入一个到购物车 bean的代理,。这个代理会暴露与购物车bean相同的方法,所以StoreService 会认为它就是一个购物车。但是,当StoreService调 用购物车的方法时,代理会对其进行懒解析并将调用委托 给会话作用域内真正的购物车 bean。
proxyMode属性被设置成了 ScopedProxyMode.INTERFACES,这表明这个代理要实现 购物车的接口,并将调用委托给实现bean。如果购物车类是接口而不是类的话,这是可以的(也是最为 理想的代理模式)。但如果购物车类是一个具体的类的话, Spring就没有办法创建基于接口的代理了。此时,它必须使用CGLib 来生成基于类的代理。所以,如果bean类型是具体类的话,我们必须要将proxyMode属性设置为ScopedProxyMode.TARGET_CLASS,以此来表明要以生成目标 类扩展的方式创建代理。
请求作用域的bean应该也以作用域代理的方式进行注入。
如果需要使用XML来声明会话或请求作用域的bean,那么就不能使 用@Scope注解及其proxyMode属性了,要使用<aop:scoped-proxy>。

<aop:scoped-proxy>是与@Scope注解的proxyMode属性功能相 同的Spring XML配置元素。它会告诉Spring为bean创建一个作用域代理。默认情况下,它会使用CGLib创建目标类的代理。但是我们也可 以将proxy-target-class属性设置为false,进而要求它生成基 于接口的代理:
<为了使用<aop:scoped-proxy>元素,我们必须在XML配置中声明 Spring的aop命名空间>


笔记5 bean的作用域的更多相关文章
- [原创]java WEB学习笔记99:Spring学习---Spring Bean配置:自动装配,配置bean之间的关系(继承/依赖),bean的作用域(singleton,prototype,web环境作用域),使用外部属性文件
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Spring4学习笔记 - 配置Bean - 自动装配 关系 作用域 引用外部属性文件
1 Autowire自动装配 1.1 使用:只需在<bean>中使用autowire元素 <bean id="student" class="com.k ...
- Spring 学习笔记 Bean的作用域
在配置文件中定义Bean时,用户不但可以配置Bean的属性值以及相互之间的依赖关系,还可以定义Bean的作用域.作用域将对Bean的生命周期和创建方式产生影响.在低版本的Spring中,仅有两个作用域 ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring中Bean的作用域
作用域的种类 Spring 容器在初始化一个 Bean 的实例时,同时会指定该实例的作用域.Spring3 为 Bean 定义了五种作用域,具体如下. 1)singleton 单例模式,使用 sing ...
- 浅析Spring中bean的作用域
一.前言 刚刚花了点时间,阅读了一下Spring官方文档中,关于bean的作用域这一块的内容.Spring-4.3.21官方文档中,共介绍了七种bean作用域,这篇博客就来简单介绍一下这七种作用域 ...
- Spring中Bean的作用域、生命周期
Bean的作用域.生命周期 Bean的作用域 Spring 3中为Bean定义了5中作用域,分别为singleton(单例).protot ...
- Spring bean的作用域和生命周期
bean的作用域 1.singleton,prototype, web环境下:request,session,gloab session 2.通过scope="" 来进行配置 3. ...
- Bean 的作用域
•在 Spring 中, 可以在 <bean> 元素的 scope 属性里设置 Bean 的作用域. 默认情况下, Spring 只为每个在 IOC 容器里声明的 Bean 创建唯一一个实 ...
- Spring学习笔记—装配Bean
在Spring中,对象无需自己负责查找或创建与其关联的其他对象.相反,容器负责把需要相互协作的对象引用赋予各个对象.创建应用对象之间协作关系的行为通常称为装配(wiring),这也是依赖注入的本质. ...
随机推荐
- DELL EqualLogic PS存储硬盘故障数据恢复成功案例分享
DELL EqualLogic PS4000采用虚拟ISCSI SAN阵列,为远程或分支办公室.部门和中小企业存储部署带来企业级功能.智能化.自动化和可靠性.以简化的管理.快速的部署及合理的价格满足了 ...
- Linux命令及lamp搭建
单纯属于Linux的命令:1.强制卸载有依赖关系的软件包: rpm -e httpd-2.2.15-26.el6.x86_64 --nodeps(--nodeps表示无依赖)4.删除当前目录所有的文件 ...
- Formdata 图片上传 Ajax
/*图片上传*/ $("点击对象").bind("click", function(e){ $('#form-upload').remove(); $('bod ...
- Python内置函数(34)——map
英文文档: map(function, iterable, ...) Return an iterator that applies function to every item of iterabl ...
- Linux知识积累(4) Linux下chkconfig命令详解
Linux下chkconfig命令详解 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. ...
- Linux实战案例(1)CentOS修改主机名(hostname)
1.临时修改主机名 显示主机名: oracle@localhost:~$ hostname localhost 修改主机名: oracle@localhost:~$ sudo hostname orc ...
- python 开发之路 -MySQL
阅读目录 第一篇 : 数据库 之 基本概念 第二篇 : MySQL 之 库操作 第三篇 : MySQL 之 表操作 第四篇 : MySQL 之 数据操作 第五篇 : MySQL 之 视图.触发器.存储 ...
- 剑指offer-二叉树的下一个节点
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 解题思路 分情况考虑如下: 若该节点为空,则直 ...
- urlopen()&urlretrieve()
1.urlopen()方法 urllib.request.urlopen(url[,data[,proxies]]) 创建一个表示远程url的类文件对象,然后像本地文件一样的操作这个类文件对象来获取远 ...
- 【阿里聚安全·安全周刊】 全美警局已普遍拥有破解 iPhone 的能力 | 女黑客破解任天堂Switch,称硬件漏洞无法修复
本周的七个关键词: 破解 iPhone丨 女黑客破解任天堂丨假的身份证 丨 扫黄打非丨华盛顿特区发现手机间谍设备 丨 Telegram被俄罗斯监管机构告上法庭丨价值5万美金的Firefox浏览器漏洞 ...