Spring实战(七)Bean 的作用域
1、Spring中bean 的多种作用域
- 单例(Singleton):整个应用中只创建一个bean 的实例,Spring默认创建单例的bean;
- 原型(Prototype):每次注入or通过Spring应用上下文获取时,创建一个新的bean实例;
- 会话(Session):在web应用中,为每个会话创建一个bean实例,例如用户购物车的bean;
- 请求(Request):在web应用中,为每个请求创建一个bean实例;
2、设置会话(Session)作用域
@Component
@Scope{ value=WebApplicationContext.SCOPE_SESSION,
proxyMode=ScopedProxyMode.INTERFACES }
public ShoppingCart cart(){...}
3、购物车场景中的作用域代理——延迟注入请求和会话作用域的bean。
假设将ShoppingCart bean注入到单例StoreService bean的Setter方法中:
@Component
public class StoreService{
public void setShoppingCart(ShoppingCart shoppingCart){
this.shoppingCart=shoppingCart;
}
...
}
系统中每个用户拥有一个ShoppingCart实例,我们并不想让Spring注入某个固定的ShoppingCart实例到StoreService中,我们希望的是当StoreService处理购物车功能时,它使用的ShoppingCart恰好是当前会话对应的哪一个。
Spring会注入一个到ShoppingCart bean的代理,而不是一个实际的ShoppingCart bean。这个代理会暴露与ShoppingCart相同的方法,所以StoreService会认为它就是一个购物车。
而当实际调用ShoppingCart中的方法时,代理会进行懒解析并将调用委托给会话作用域内的真正的ShoppingCart bean!!
同样,请求作用域的bean也会面临相同的装配问题,也可以通过注入作用域代理解决。
4、作用域代理——延迟注入请求和会话作用域的bean
上面我们使用接口来作为作用域代理,其实也可以使用具体类。
此时,Spring必须使用CGLib来生成基于类的代理:
proxyMode=ScopedProxyMode.TARGET_CLASS
5、XML中声明作用域代理
<bean id="cart" class="xx.xxx.ShoppingCart" scope="session">
<aop:scoped-proxy />
</bean>
<aop:scoped-proxy>即告诉Spring使为bean创建一个作用域代理,切默认使用CGLib创建目标类的代理。
我们也可以通过设置来生成基于接口的代理:
<bean id="cart" class="xx.xxx.ShoppingCart" scope="session">
<aop:scoped-proxy proxy-target-class="false" />
</bean>
Spring实战(七)Bean 的作用域的更多相关文章
- (转)配置Spring管理的bean的作用域
http://blog.csdn.net/yerenyuan_pku/article/details/52833477 Spring管理的bean的作用域有: singleton 在每个Spring ...
- Spring基础11——Bean的作用域
1.Bean的作用域种类 Spring中的bean的作用域分为四种:singleton.prototype.session.request,后两种很少使用,下面我们主要来学习前两种 2.singlet ...
- Spring 学习笔记 Bean的作用域
在配置文件中定义Bean时,用户不但可以配置Bean的属性值以及相互之间的依赖关系,还可以定义Bean的作用域.作用域将对Bean的生命周期和创建方式产生影响.在低版本的Spring中,仅有两个作用域 ...
- Spring第五弹—–配置Spring管理的bean的作用域和生命周期
singleton (默认方式) 在每个Spring IoC容器中一个bean定义只有一个对象实例.默认情况下会在容器启动时初始化bean,但我们可以指定bean节点的lazy-init=“true” ...
- (三)Spring 高级装配 bean的作用域@Scope
1.默认情况下,spring通过@Autowared注入的bean是单例的bean,但有些情况是不满足的,例如:购物车,每个会话,或每个用户登录使用的购物车都是独立的 spring的定义的作用域: a ...
- 配置spring管理的bean的作用域
.singleton 在每一个spring Ioc容器中一个bean定义只有一个对象实例.默认情况下会在容器启动时初始化bean,但我们可以指定bean节点的lazy-init = "tru ...
- Spring学习七----------Bean的配置之自动装配
© 版权声明:本文为博主原创文章,转载请注明出处 Bean的自动装配(Autowiring) no:不启用自动装配,此时需要手动注入.参考:Spring学习三----------注入方式 defaul ...
- spring支持的Bean的作用域
Sigleton:单例模式,在整个Spring IoC容器中,使用Sigleton定义Bean将有一个实例 prototype:原型模式,每次通过容器的getBean方法获取propertype都将产 ...
- 浅析Spring中bean的作用域
一.前言 刚刚花了点时间,阅读了一下Spring官方文档中,关于bean的作用域这一块的内容.Spring-4.3.21官方文档中,共介绍了七种bean作用域,这篇博客就来简单介绍一下这七种作用域 ...
- spring容器bean的作用域 & spring容器是否是单例的一些问题
Spring容器中Bean的作用域 当通过Spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域.Spring支持如下5种作用域: singleto ...
随机推荐
- 给类或者类的对象添加打印内容 def __repr__(self)
通常情况下 打印一个类或者类的对象 会显示 xx.xx object at 0xaaaaabbbbbbb 只会告诉你这个对象或者类 储存在某个内存中,这是因为你的类没有实现相关的打印功能 print ...
- C#_switch语句,for循环,do while循环,while循环
1:switch语句,代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Tex ...
- (转载)IOCP 浅析
转自:http://www.ibm.com/developerworks/cn/java/j-lo-iocp/#author 郭 仁祥, 软件工程师, IBM 简介: 传统的 Server/Cli ...
- windows服务器安装nodejs实现自动计划
直接官网打开:https://nodejs.org/en/ 下载相应的系统nodejs版本直接安装后,通过命令行window+r 输入node + web(目录)+\pubils\app.js ...
- R-CNN论文阅读摘要
论文链接: https://arxiv.org/pdf/1311.2524.pdf Abstract Our approach combines two key insights: (1) one c ...
- Rose的四种视图模型
用例视图 用例视图中包括了系统中的所有参与者.用例和用例图,必要时还可以在用例视图中添加顺序图.活动图等 逻辑视图 逻辑系统关注系统是如何实现用例中所描述的功能的,主要是对系统功能性需求提供支持,即为 ...
- RabbitMQ学习之:(三)第一个RMQ的程序 (转贴+我的评论)
RabbitMQ for Windows: Building Your First Application Posted by Derek Greer on March 7, 2012 This is ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_4-01 常用的服务间调用方式讲解
笔记 第四章 服务消费者ribbon和feign实战和注册中心高可用 1.常用的服务间调用方式讲解 简介:讲解常用的服务间的调用方式 RPC: 远程过程调用,像调用本地 ...
- 来自iSpy整理的最全海康大华IPC的RTSP连接地址
来自iSpy整理的最全海康大华IPC的RTSP连接地址 先贴出处: 海康:http://www.ispyconnect.com/man.aspx?n=Hikvision 大华:http://www.i ...
- RocketMQ之九:RocketMQ消息发送流程解读
在讨论这个问题之前,我们先看一下Client的整体架构. Producer与Consumer类体系 从下图可以看出以下几点:(1)Producer与Consumer的共同逻辑,封装在MQClientI ...