码迷,mamicode.com
首页 > 编程语言 > 详细

Spring的IOC容器—scope作用域

时间:2015-06-30 18:24:50      阅读:609      评论:0      收藏:0      [点我收藏+]

标签:

Scope 简介:

Scope用来声明容器中的对象的存货时间。即容器在对象在进入其相应的scope之前,生成并装配这些对象,在该对象不再处于这些scope的限定之后,容器通常会销毁这些对象。

Sprign容器最初提供了两种bean的scope类型:singletoon和prototype。自Spring2.0之后,引入了另外三种scope类型,即request、session和global session类型。这三种类型只能再web中使用。


1.Singleton

代表在Spring的IOC容器中只存在一个实例,所有对象引用共享该实例。 该实例从容器启动,并因第一次请求而初始化之后,将一直存活到容器中。与IOC容器共生共灭。


技术分享


注意:Singleton作用域与Singleton模式的区别

标记Singleton的bean代表这种类型的bean在容器中只存在一个共享实例,而Singleton模式则是保证在同一个classloader中只存在一个这种类型的实例。


Singleton 特性:

A. 对象实例数量:容器中只存在一个实例,所有对该类型bean的依赖都引用这单一实例。

B. 对象存活时间:从容器启动,到第一次因请求而实例化开始,只要容器不销毁或退出,该实例一直存在。


配置形式
<bean id="mockObject1"class="...MockBusinessObject"/>

<beanid="mockObject1" class="...MockBusinessObject"singleton="true"/>
<bean id="mockObject1" class="...MockBusinessObject"scope="singleton"/>

2. prototype  

容器在接到标有prototype类型对象的请求后,会每次重新生成一个新的对象实例给请求方。请求方负责当前返回对象的后继生命周期工作,包括对象的销毁。

一般声明此类型的bean都是一些有状态的。比如保存每个顾客信息的对象。


技术分享

配置形式

         <bean id="mockObject1" class="...MockBusinessObject"singleton="false"/>
         <bean id="mockObject1" class="...MockBusinessObject"
scope="prototype"/>

 

3. requestsessiionglobal session
它们只适用于Web应用程序,通常是与XmlWebApplicationContext共同使用

.request

配置形式:<bean id="userManager"class="... "scope="request"/>

Spring容器,即XmlWebApplicationConteext会为每个Http请求创建一个新的requestProcessor对象供当前对象使用,当请求结束后,该对象实例的生命周期即告结束。当同时有10Http请求进来,容器会分别为这10个请求返回10个全新的实例,且它们之间互不干扰。


.session   

 配置形式: <bean id="userManager"class="...userManager "scope="session"/>

Spring容器会为每个独立的session创建属于它们自己的全新的userManager对象实例。存活时间大于request


.global session

配置形式: <bean id="userManager" class="...userManager"scope="globalSession"/>

global session只有应用在基于portletWeb应用程序中才有意义,它映射到portletglobal范围的 session。如果在普通的基于servletWeb应用中使用了这个类型的scope,容器会将其作为普通的session
类型的scope对待。

 

4.自定义scope类型

用户可以根据自己的需要,添加自定义的scope类型。除了默认的singletonprototype之外,其他三种类型,包括自定义类型都实现了org.springframework.beans.factory.config.Scope接口。该接口定义如下:

public interface Scope {
	Object get(String name, ObjectFactory objectFactory); 
	Object remove(String name);
	void registerDestructionCallback(String name, Runnable callback);
	String getConversationId();
}


要实现自己的scope类型,首先需要给出一个Scope接口的实现类,接口定义中的4个方法并非都是必须的,但getremove方法必须实现。


版权声明:本文为博主原创文章,未经博主允许不得转载。

Spring的IOC容器—scope作用域

标签:

原文地址:http://blog.csdn.net/mingxuanyun/article/details/46697473

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!