笔记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),这也是依赖注入的本质. ...
随机推荐
- auto_prepend_file与auto_append_file使用方法
auto_prepend_file与auto_append_file使用方法 如果需要将文件require到所有页面的顶部与底部. 第一种方法:在所有页面的顶部与底部都加入require语句. 例如: ...
- django报错Manager isn't accessible via UserInfo instances
出现这种错误是因为调用模型对象时使用了变量名,而不是对象名(模型类),例如: user = UserInfo()user_li = user.objects.filter(uname=username ...
- linux的slect的脚本适用于交互
[rhuang@localhost ~]$ vi os.sh #!/bin/bash echo "What is your favourite OS?" select var in ...
- Oracle银行存取钱系统
Oracle银行存取钱系统 /* 银行系统 要求: 1.创建一个用户信息表(userinfo).一个交易信息表(deal) 2.用户信息表字段:用户编号.用户名称.密码.余额 交易信息表字段:编号.交 ...
- 学习ASP.NET Core Razor 编程系列五——Asp.Net Core Razor新建模板页面
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- Swing使用JavaFXweb组件
概述 swing中内嵌入web组件的 需要使用一些其他的jar包 ,但是如果使用javafx的组件,那么也比较的方便,性能也比较高. 代码 webview 在javafx 中是作为 scene出现的所 ...
- DOM常用外部插入方法与区别
1.DOM外部插入after()与before() 节点与节点之前有各种关系,除了父子,祖辈关系,还可以是兄弟关系.之前我们在处理节点插入的时候,接触到了内部插入的几个方法,这节我们开始讲外部插入的处 ...
- vi和vim编辑器
VI vi是一种计算机文本编辑器,由美国计算机科学家比尔·乔伊(Bill Joy)完成编写,并于1976年以BSD协议授权发布. VIM Vim是从vi发展出来的一个文本编辑器.其代码补完.编译及错误 ...
- 南阳OJ-91-阶乘之和---二进制枚举(入门)
题目链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=91 题目大意: 给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为 ...
- Docker----起步
最近学习了一下的docker相关的东西,下面介绍一下我个人的学习总结和体会.关于docker的详细介绍和优势,在网上随便都可以找得到,就不做介绍了.这个部分的内容比较简单,有Docker基础的朋友可以 ...