`
zyl
  • 浏览: 483938 次
社区版块
存档分类
最新评论

spring2.0 自定义Scope

阅读更多
    在spring 的以前版本中,只是支持singleton,prototype两种类型,
    在2.0中作了很大的改进,增加了RequestScope,和SessionScope两种范围。当然也支持自定义Scope
    下面简单介绍一下,spring2.0是如何支持自定义Scope的。
Scope接口,需要实现的接口,主要的方法:
  • Object get(String name, ObjectFactory objectFactory)
  • Object remove(String name)
  • void registerDestructionCallback(String name, Runnable callback)
get 和remove这是最常用的方法,registerDestructionCallback用于回收对象时,可以异步调用其它操作。
下面简单定义一个Scope对象:
 
java 代码
 
  1. Scope scope = new Scope() {  
  2.     private int index;  
  3.     private List objects = new LinkedList(); {  
  4.         objects.add(new TestBean());  
  5.         objects.add(new TestBean());  
  6.     }  
  7.     public String getConversationId() {  
  8.         return null;  
  9.     }  
  10.     public Object get(String name, ObjectFactory objectFactory) {  
  11.         if (index >= objects.size()) {  
  12.             index = 0;  
  13.         }  
  14.         return objects.get(index++);  
  15.     }  
  16.     public Object remove(String name) {  
  17.         throw new UnsupportedOperationException();  
  18.     }  
  19.     public void registerDestructionCallback(String name, Runnable callback) {  
  20.     }  
  21. };       



如何使用让此scope生效,有两种方法:
第一编程实现:
java 代码
 
  1. ConfigurableBeanFactory 定义了关于Scope的一些方法:  
  2. void registerScope(String scopeName, Scope scope);  
  3. String[] getRegisteredScopeNames();  
  4. Scope getRegisteredScope(String scopeName);  

可以使用registerScope方法来注册相应的scope
 
java 代码
 
  1. applicationContext.getBeanFactory().registerScope("myScope", scope);     
  

另外一种实现 xml 配置(建议使用)
  通过CustomScopeConfigurer 来注册相应的Scope,由于CustomScopeConfigurer 实现了BeanFactoryPostProcessor,对于ApplcationContext,自动会实现相应的配置
 
xml 代码
 
  1. <bean id="myScope" class="MyScope"/>  
  2. <bean id="customerScope" class="org.springframework.beans.factory.config.CustomScopeConfigurer">  
  3.     <property name="scopes">  
  4.         <map>  
  5.             <entry key="myScope">  
  6.                 <bean class="myScope"/>  
  7.             </entry>  
  8.         </map>  
  9.     </property>  
  10. </bean>  
  11. <bean id="usesScope" class="org.springframework.beans.TestBean" scope="myScope"/>   
  

当然也可以编程实现
 
java 代码
 
  1. Map scopes = new HashMap();  
  2. scopes.put(thisnew NoOpScope());                          
  3. CustomScopeConfigurer figurer = new CustomScopeConfigurer();  
  4. figurer.setScopes(scopes);       


分享到:
评论
4 楼 kdekid 2007-01-10  
stamen 写道
  虽然Spring提供了这个扩展功能,但我觉得这项功能基本上没有什么意义,只要用好Spring自定义的
singleton,prototype,request,session和globalSession就够了。这种功能是拿来宣传的,而不是实战的。


一个场景:

例如在银行的柜面交易,我要存入10k,并转账20k到另一个帐户,从我与柜面的小姐开始打交道,到我离开柜台,假设这是一个 session,而每次发生的交易都是一个 long time transaction(因为金额数目或者其它原因,例如需要授权等,这并不是一个单一的 request),这时候需要有一个 transaction scope 的 bean 来临时存放我的数据,在我离开柜台后销毁。这时候就需要有 transaction scope 了,而这个 scope 是需要自己实现的。

当然,实际上银行不是用这种方式来 manage transaction 的。这里只是一个虚拟的例子而已。
3 楼 stamen 2007-01-10  
   一个框架成熟后,有时添加的功能往往是为了独善其身,要是不提供这样的功能,竞争者并会在比较时拿来做为论据,但作为开发者,这些完善性的功能,是需要学习代价的。
2 楼 zyl 2007-01-05  
    从意义上来说,实用性是不强,可作为一个好的框架,提供足够的灵活性,那就另当别论了。
1 楼 stamen 2007-01-04  
  虽然Spring提供了这个扩展功能,但我觉得这项功能基本上没有什么意义,只要用好Spring自定义的
singleton,prototype,request,session和globalSession就够了。这种功能是拿来宣传的,而不是实战的。

相关推荐

    spring2.0技术手册

    林信良著 spring2.0技术手册 《Spring 2.0技术手册》介绍了Spring 2.0的新特性,诸如Spring 2.0的新配置、新AOP支持、增强的IoC、JDBC和form标签等新功能。它通过实际完成一个完整的Spring项目示例,展示了与...

    Spring 2.0 spring 2.0 标准API

    Spring 2.0 标准API 用处不大的资源我不发

    Spring2.0jar包

    Spring2.0jar包,J2EE项目中,用于集成的框架。

    Spring 2.0 中文参考手册

    Spring 2.0 中文参考手册,Spring 2.0 中文参考手册,Spring 2.0 中文参考手册,Spring 2.0 中文参考手册Spring 2.0 中文参考手册,

    Spring2.0技术手册(林信良)_part2

    本书介绍了Spring 2.0的新特性,诸如Spring 2.0的新配置、新AOP支持、增强的IoC、JDBC和form标签等新功能。它通过实际完成一个完整的Spring项目示例,展示了与Spring相关API的使用技巧,能够显著减少每一位入门者...

    详尽的Spring2.0学习提纲

    对于学习Spring2.0很好的指导作用,给初学者指明一个学习的方向和思路。

    spring2.0jar包(一)

    spring2.0jar包(一) spring2.0jar包(一) spring2.0jar包(一) spring2.0jar包(一) spring2.0jar包(一) spring2.0jar包(一) spring2.0jar包(一)

    spring2.0 中文帮助文档 pdf

    spring2.0 中文帮助文档 spring2.0 中文帮助文档 spring2.0 中文帮助文档 spring2.0 中文帮助文档 spring2.0 中文帮助文档

    spring2.0 使用 Quartz 必备包

    spring2.0 使用 Quartz 必备包 里面有: quartz-all-1.5.2.jar spring-support.jar 适合:SSH框架 spring2.0 strut2.0 hibernate3.2等

    Spring2.0技术手册

    本书介绍了Spring 2.0的新特性,诸如Spring 2.0的新配置、新AOP支持、增强的IoC、JDBC和form标签等新功能。它通过实际完成一个完整的Spring项目示例,展示了与Spring相关API的使用技巧,能够显著减少每一位入门者...

    SPRING2.0开发详解

    SPRING2.0开发详解: 详细阐述了SPRING2.0的核心技术和框架整合能力

    spring2.0技术手册 (扫描版)

    第1章认识Spring 第2章Spring入门 第3章Bean、消息、事件 第4章SpringAOP 第5章JDBC、事务支持 第6章Hibernate与Spring 第7章SpringWebMVC框架 第8章View层方案、Web框架整合 第9章API封装 第10章项目:...

    spring2.0中文手册及使用指南 chm

    spring2.0中文手册及使用指南,chm格式

    Spring2.0中文教程

    Spring2.0中文教程

    spring2.0中文文档

    spring2.0中文文档

    Spring2.0宝典源代码

    Spring2.0宝典全书源代码,作者李刚,随书所附的光盘

    spring2.0中文参考手册.rar

    spring2.0中文参考手册.rar spring2.0中文参考手册.rarspring2.0中文参考手册.rar

    spring2.0(中文)

    本书介绍了Spring2.0的新特性,诸如Spring2.0的新配置、新AOP支持、增强的IOC、JDBC和form标签等新功能。它通过实际完成一个完整的Spring项目示例,展示了与Spring相关API的使用技巧,能够显著减少每一位入门者摸索...

    SPRING2.0中文文档

    全中文的SPRING2.0技术文档。

    Spring 2.0 MVC的应用

    这是一个使用Spring2.0的MVC书写一个web应用。是学习spring2.0开发web应用的好例子。

Global site tag (gtag.js) - Google Analytics