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

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就够了。这种功能是拿来宣传的,而不是实战的。

相关推荐

    struts1.2+spring2.0+hibernate3.1集成开发详解

    ### Struts 1.2 + Spring 2.0 + Hibernate 3.1 集成开发详解 #### 1. 引言 随着Java Web应用的发展,越来越多的企业级项目选择了Struts、Spring与Hibernate(简称SSH)这三种框架进行集成开发。本篇文章将通过...

    spring security oauth 2.0 例子

    Spring Security OAuth 2.0 是一个强大的安全框架,用于保护基于Java和Spring的应用程序。它提供了全面的身份验证和授权服务,使得开发人员可以轻松地实现OAuth 2.0规范的安全功能。在这个例子中,我们将深入探讨...

    spring-reference.pdf

    Spring允许用户通过实现特定接口来自定义容器的行为,例如定义自定义Bean后处理器、自定义作用域等。 以上是Spring 2.0.6版本的一些关键知识点总结,这些知识点覆盖了Spring框架的核心概念和技术细节,对于理解和...

    spring-reference

    #### 二、Spring 2.0新特性介绍 ##### 2.1 Inversion of Control (IoC) 容器 在Spring 2.0版本中,IoC容器得到了显著的增强: - **Easier XML Configuration**:简化了XML配置方式,使得配置文件更加简洁易懂。 -...

    spring ioc

    文件“spring2.0-reference_final_zh_cn.chm”是一个Spring 2.0版本的中文参考手册,里面详细阐述了Spring框架的各个方面,包括IOC的详细概念和使用方法。这个文档对于初学者和经验丰富的开发者都是宝贵的资源,它会...

    spring-webflow-reference

    - Spring Web Flow 2.3引入了多项新功能,包括流程嵌入页面、支持JSR-303 Bean验证、流程管理的持久化上下文传播、Portlet 2.0资源请求和自定义对话管理等。 - Spring Web Flow 2.2则增加了对JSF 2的支持、Spring ...

    Spring Cloud @RefreshScope 原理及使用

    Scope 是 Spring 2.0 开始就有的核心概念,表示 Bean 实例的生命周期。Scope 可以是 Singleton、Prototype 等,或者是自定义的扩展接口。Bean 实例的创建交由 Scope 自己控制,例如 SessionScope 是从 Session 中...

    spring3.0依赖注入详解

    Spring框架自2.0版本起,不断优化其依赖注入机制,引入了一系列注解以简化Java应用程序的开发过程。特别是Spring 3.0版本,对依赖注入(DI)进行了深度拓展,引入了基于Annotation的依赖注入实现,极大地提高了代码...

    基于OAuth2和Spring Boot的通信应用.pdf

    在这个基于OAuth2.0和Spring Boot的通信应用中,我们将探讨如何构建一个端到端的解决方案,特别是针对服务器到服务器的通信场景,这种场景通常不涉及用户界面。 在OAuth2.0的客户端授权模式下,服务之间可以直接...

    spring webflow reference,

    - **自定义对话管理器**:允许开发者自定义对话生命周期的管理机制。 - **重定向同一状态**:可以在不改变当前状态的情况下执行重定向操作。 ##### Spring Web Flow 2.2 - **JSF 2支持**:增加了对JSF 2的支持,...

    spring boot整合activiti

    &lt;scope&gt;runtime&lt;/scope&gt; ``` **2. 配置数据库连接** 在 `application.properties` 文件中配置数据库连接信息,例如使用 H2 数据库: ```properties spring.datasource.url=jdbc:h2:mem:activiti;DB_CLOSE_...

    spring annotation 入门

    Spring 框架自2.0 版本起引入了一系列注解支持,这极大简化了配置管理,并为开发提供了更为简洁灵活的方式。通过注解,可以将业务逻辑与配置分离,减少XML配置文件的编写工作,提高开发效率。 #### 二、核心注解...

    spring-authentication-oauth

    Spring Security OAuth2是Spring社区为OAuth 2.0提供的一个实现,它为Spring应用程序提供了全面的OAuth支持。使用Spring Security OAuth2,你可以创建授权服务器来处理用户的登录和授权请求,同时也可以创建客户端来...

    JSP2_0技术手册

    **正文** 《JSP2.0技术手册》是一本深入探讨Java Server Pages(JSP)2.0版本的...通过实践和不断探索,开发者能够熟练运用JSP2.0进行复杂的Web开发工作,同时也为学习更高级的Java Web框架如Spring MVC打下坚实基础。

    spring boot activiti工作流的搭建与简单使用

    &lt;scope&gt;runtime&lt;/scope&gt; &lt;!-- ... --&gt; ``` 3. **配置数据库连接** 在 `application.properties` 文件中,配置 MySQL 数据库连接的相关信息,包括用户名、密码、URL 和驱动类: ``` spring.datasource....

    springboot使用单元测试实战

    在这里,我们使用了 `SpringRunner`,它实际上继承了 `SpringJUnit4ClassRunner` 类,而 `SpringJUnit4ClassRunner` 这个类是一个针对 JUnit 运行环境的自定义扩展,用来标准化在 Spring Boot 环境下 JUnit4.x 的...

    JMockData使用手册

    &lt;scope&gt;test&lt;/scope&gt; ``` 这里的版本号应该与当前使用的Spring框架版本相匹配。 #### 三、编写JavaBean 为了使用`JMockData`生成的数据对象,需要定义自己的JavaBean,并且这些Bean需要继承`JmockDataWrapper`...

    SpringMVC课堂笔记

    值得注意的是,对于HandlerMapping和HandlerAdapter,虽然在默认情况下SpringMVC已经提供了相应的实现,但在某些场景下,我们可能需要自定义它们以满足更复杂的需求。此外,SpringMVC的强大之处在于其高度可定制性,...

    Java框架面试题总结

    - 使用`@Scope("prototype")`注解标记Action类,确保每次请求都创建一个新的实例。 - 将所有成员变量声明为`transient`,避免在序列化过程中导致线程不安全。 - 在`execute`方法中避免使用实例变量,只使用局部变量...

Global site tag (gtag.js) - Google Analytics