Spring2.0 新特性之Bean新增范围session, request, global session
在Spring2.0之前,我们对Bean的控制仅有两种:singleton和prototype。Spring默认的Bean是为singleton,在实际项目中,一般与状态无关的Bean,都可以使用singleton;而那些与具体状态相关的Bean,则应该显示的在Bean定义中设置为singleton=false。
Spring2.0之前,我们是这么定义的:
<
bean
id
="singletonBean"
class
="myBean.singletonBean"
/>
<
bean
id
="notSingletonBean"
class
="myBean.notSingletonBean"
singleton
="false"
/>
在Spring2.0以后,因为增加了session, request, global session三种Bean的范围,所以在Bean的配置上,也发生了改变,不过Bean的默认范围仍然是singleton。
新的写法如下:
<
bean
id
="newBean"
class
="myBean.newBean"
scope
="session | request | global session | singleton | prototype"
>
<
aop:scoped-proxy
/>
</
bean
>
对于新增加的三种范围,Spring2.0对Bean的要求就是必须是在web环境中才能定义这三种范围。对比之前的singletoBean和notSingletonBean的XML定义,我们可以发现
<
aop:scoped-proxy
/> 这个新的配置项。
那么,这又是怎么一回事呢?
为了理解为什么需要这一行和以前完全不同的Bean配置,我们需要对Spring2.0实现session, request, global session三种Bean的范围的原理进行研究。
可以想象,对于开发人员来说,最重要的是得到一个实例,该实例提供给我们的就是和我们需要的Bean一样的接口。无论我们定义的Bean的范围如何,容器都要求可以将正确的实例返回给我们,那么,采用代理机制则可以完成这一个任务。代理机制屏蔽了基于Bean所定义的范围返回实例的要求,同时可以提供和我们所要求的Bean同样的接的口。基于这个原理,
为了实现基于作用域机制的Bean的控制,Spring2.0引入了一个新的接口:
public
interface
Scope
{
Object get(String name, ObjectFactory objectFactory);
Object remove(String name);
}
这个接口是用来表示Bean范围的接口,而在ConfigurableBeanFactory接口中定义了Bean工厂相关Scope注册的方法,使得可往Bean工厂中加入新范围的Bean。
public
interface
ConfigurableBeanFactory
extends
HierarchicalBeanFactory,
void
registerScope(String scopeName, Scope scope);
void
destroyScopedBean(String beanName);
}
同时,Spring2.0在AbstractFactoryBean的getBean方法中实现了对Scope Bean支持以及在WebApplicationContext中注册session.request,global session三种Scope,这里就不继续贴代码了。
最后需要提醒的是global session是应用于基于portlet的web应用中才有意义。
posted on 2006-08-28 17:07
旱头憨脑
阅读(1054)
评论(0)
编辑
收藏
所属分类:
j2ee
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
Javascript cookie操作攻略
Spring2.0 AOP 心得(二)
Spring2.0 AOP使用心得(一)
Tomcat中,UTF-8 URL提交参数中文解决终极方案
Struts中不限个数上传文件的实现方案
Spring2.0 新特性之Bean新增范围session, request, global session
旱头憨脑
lanluquan
导航
BlogJava
首页
新随笔
联系
聚合
管理
统计
随笔 - 1
文章 - 10
评论 - 1
引用 - 0
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔档案
■
2006年10月 (1)
文章分类
■
ajax(1)
(rss)
■
j2ee(7)
(rss)
■
java
(rss)
■
ruby(1)
(rss)
■
非技术(1)
(rss)
文章档案
■
2008年6月 (1)
■
2007年9月 (1)
■
2007年7月 (1)
■
2006年10月 (4)
■
2006年9月 (1)
■
2006年8月 (2)
搜索
最新评论
1. re: Hibernate3 父子映射报错:illegal access to loading collection
评论内容较长,点击标题查看
--d