spring(基础19) 注解@Scope详解
来源:互联网 发布:2016注册淘宝账号步骤 编辑:程序博客网 时间:2024/06/10 23:52
1.目前,scope的取值有5种取值:
在Spring 2.0之前,有singleton和prototype两种;
在Spring 2.0之后,为支持web应用的ApplicationContext,增强另外三种:request,session和global session类型,
它们只实用于web程序,通常是和XmlWebApplicationContext共同使用。
2.具体含义:
1)singleton (单一实例)-->一个spring容器中只有一个bean的实例(默认配置)
此取值时表明容器中创建时只存在一个实例,所有引用此bean都是单一实例。如同每个国家都有一个总统,国家的所有人共用此总统,而这个国家就是一个spring容器,总统就是spring创建的类的bean,国家中的人就是其它调用者,总统是一个表明其在spring中的scope为singleton,也就是单例模型。
此外,singleton类型的bean定义从容器启动到第一次被请求而实例化开始,只要容器不销毁或退出,该类型的bean的单一实例就会一直存活,典型单例模式,如同servlet在web容器中的生命周期。
2)prototype -->每次调用新建一个bean的实例
spring容器在进行输出prototype的bean对象时,会每次都重新生成一个新的对象给请求方,虽然这种类型的对象的实例化以及属性设置等工作都是由容器负责的,但是只要准备完毕,并且对象实例返回给请求方之后,容器就不在拥有当前对象的引用,请求方需要自己负责当前对象后继生命周期的管理工作,包括该对象的销毁。也就是说,容器每次返回请求方该对象的一个新的实例之后,就由这个对象“自生自灭”,最典型的体现就是spring与struts2进行整合时,要把action的scope改为prototype。
如同分苹果,将苹果的bean的scope属性声明为prototype,在每个人领取苹果的时候,我们都是发一个新的苹果给他,发完之后,别人爱怎么吃就怎么吃,爱什么时候吃什么时候吃,但是注意吃完要把苹果核扔到垃圾箱!对于那些不能共享使用的对象类型,应该将其定义的scope设为prototype。
3)request-->web项目中,给每一个http request新建一个bean实例
Spring容器,即XmlWebApplicationContext 会为每个HTTP请求创建一个全新的RequestPrecessor对象,当请求结束后,该对象的生命周期即告结束,如同Java web中request的生命周期。当同时有100个HTTP请求进来的时候,容器会分别针对这10个请求创建10个全新的RequestPrecessor实例,且他们相互之间互不干扰,简单来讲,request可以看做prototype的一种特例,除了场景更加具体之外,语意上差不多。
4)session-->web项目中,给每一个http session新建一个bean实例
对于web应用来说,放到session中最普遍的就是用户的登录信息,对于这种放到session中的信息,我们可以使用如下形式的制定scope为session:
Spring容器会为每个独立的session创建属于自己的全新的UserPreferences实例,比request scope的bean会存活更长的时间,其他的方面没区别,如果java web中session的生命周期
5)global session-->只在portal应用中有效,给 每一个global http session新建一个bean实例
global session只有应用在基于porlet的web应用程序中才有意义,它映射到porlet的global范围的session,如果普通的servlet的web 应用中使用了这个scope,容器会把它作为普通的session的scope对待。3.1xml配置:
<bean id="userAction" class="com.alibaba.project.user.UserAction" scope="prototype"><property name="service"><ref bean="userService"/></property></bean>3.2 注解配置
@Service("scUserService")@Scope("prototype")public class ScUserServiceImpl implements ScUserService {public static final Logger log = Logger.getLogger(ScUserServiceImpl.class);//TODO 业务代码...}
- spring(基础19) 注解@Scope详解
- Spring注解@Scope("prototype")
- Spring注解@Scope("prototype")
- Spring中的@scope注解
- Spring注解@Scope("prototype")
- Spring中的@scope注解
- Spring中的@scope注解
- Spring中的@scope注解
- Spring中的scope配置和@scope注解
- Spring注解之@Scope("prototype")
- Spring scope属性详解
- Spring中的Scope详解
- Spring scope详解
- Spring scope详解
- spring中的scope详解
- Spring scope属性详解
- Spring scope属性详解
- Spring scope属性详解
- mysql---多表查询
- html、css、js文件加载顺序及执行情况
- volatile 关键字
- C++例题分析2,复制构造函数
- jdbc Template 介绍和 spring 链接数据源的四种方式
- spring(基础19) 注解@Scope详解
- PowerDesigner中SQL文件、数据库表反向生成PDM
- Python语法第10讲:面向对象之继承
- Python学习中常常遇到的一些问题
- linux文件权限与分组
- 服务器内部转发和请求重定向的区别
- 获取请求主机的IP端口等信息
- Java 中缀转后缀
- 轮播图中带粘性效果的小点