Jason ---分享,共同进步

激情成就梦想,努力创造未来
随笔 - 53, 文章 - 1, 评论 - 45, 引用 - 0
数据加载中……

spring 常识2

1, Spring bean 定义

spring bean 定义可能包含大量的配置信息,包括容器相关的信息(比如初始化方法,静态工厂方法

等)、构造函数参数、属性等。如果两个bean之间的配置信息大同小异,可采用bean的继承来减少重

复配置工作。子bean定义可以从父bean定义继承部分配置。它也可覆盖一些配置,或者添加一些配置

。使用继承配置可以节省很多输入工作,实际上就是一种模板形式。

spring中事务配置中就有这样例子,为了使用事务只要父配置了事务代理就可以了,所有需要事务的

bean只要继承父就可以了。说到这个就在多说几句,父bean通常不需要实例化的,而仅仅作为子bean

定的的模板使用;而ApplicationContext默认预初始化所有的singleton bean。为了阻止父bean被预

初始化,可以使用abstract属性设置父bean为抽象bean。容器会忽略所有的抽象bean定义,预初始化

时不初始化抽象bean

 

2, spring 事务管理

传统的J2EE开发者对事务管理可能采用两种策略

(1),全局事务:全局事务通常由应用服务器管理,使用JTA。全局事务可跨越多个事务性的资源,保证

在多个事务性资源间跨越时资源一致性。
(2),局部事务:局部事务和特定资源相关,如,一个和JDBC链接关联的事务。该事务尽能保证对该

JDBC连接数据库的一致性,对局部事务,应用服务器不需要参与事务管理,不能保证跨越多个资源的

事务正确性。

 

3,编程式事务

Spring 提供两种编程式的事务管理

 

(1)使用TransactionTemplate事务管理

(2)直接使用一个PlatformTransactionManager实现类管理事务。

 

两种编程式的事务都不需要与特定的事务API耦合,第一种更符合Spring模板式的编程模型,因此通常推荐采用第一种方式,第二种非常类似于JTA的UserTransaction的API编程,区别是减少了异常处理。

 

 

 

4,声明式事务

Spring的声明式事务是通过面向切面(AOP)实现。

(1)使用声明式事务管理

通常,通过TransactionPoxyFactoryBean为目标Bean生成Spring事务代理。当bean实例的方法需要事务管理时,采用TransactionPoxyFactoryBean来自目标bean生成事务代理。每个TransactionPoxyFactoryBean为一个具体的目标bean生成代理对象,代理对象的方法改写了目标bean的方法,就是在目标bean的方法执行之前加入开始事务,在目标bean方法结束之后提交事务,遇到指定异常回滚事务

 

    定义事务代理bean模板

Xml代码 复制代码
  1. <bean id="txProxyTemplate" abstract="true"  
  2.     class="<SPAN style="COLOR: #ff0000">org.springframework.transaction.interceptor.TransactionProxyFactoryBean</SPAN>">  
  3.     <property name="transactionManager">  
  4.         <ref bean="transactionManager" />  
  5.     </property>  
  6.     <property name="transactionAttributes">  
  7.         <props>  
  8.             <prop key="trans_*">PROPAGATION_REQUIRED</prop>  
  9.             <prop key="query*">  
  10.                 PROPAGATION_REQUIRED,readOnly,-Exception   
  11.             </prop>  
  12.             <prop key="find*">  
  13.                 PROPAGATION_REQUIRED,readOnly,-Exception   
  14.             </prop>  
  15.             <prop key="load*">  
  16.                 PROPAGATION_REQUIRED,readOnly,-Exception   
  17.             </prop>  
  18.             <prop key="*">PROPAGATION_REQUIRED,-Exception</prop>  
  19.         </props>  
  20.     </property>  
  21. </bean>  

 

 

(2)根据BeanName自动创建事务代理

如果同一个应用中有很多目标bean需要生成事务代理,当然可以为每个目标bean额外配置一个TransactionPoxyFactoryBean bean.这样做的缺点是,配置文件相当臃肿而且难以维护,此时可以考虑使用自动事务代理。自动事务代理的思路是,当ApplicationContext初始化完成后,由上下文中的某个bean"后处理"每个目标bean,为这些目标bean生成事务代理。

能为目标bean执行"后处理"的bean必须实现BeanFactoryPostProcessor接口,ApplicationContext完成初始化后,会自动初始化所有实现BeanFactoryPostProcessor接口的bean,并且让它“后处理”其他bean.Spring提供BeanFactoryPostProcessor的实现类BeanNameAutoPoxyCreatorBeanNameAutoPoxyCreator可以用来处理ApplicationContext中其他bean,方法是通过名称来识别,并且把他们用事务代理包装起来。BeanNameAutoPoxyCreator生成的事务代理,和使用TransactionPoxyFactoryBean生成的事务代理基本一致。

 

    定义事务拦截bean

Xml代码 复制代码
  1.  <bean id="transactionInterceptor"  
  2.   class="<SPAN style="COLOR: #ff0000">org.springframework.transaction.interceptor.TransactionInterceptor</SPAN>">  
  3.   <property name="transactionManager" ref="TransactionManager" />  
  4.      
  5.   <property name="transactionAttributes">  
  6.    <props>  
  7.     <prop key="create*">  
  8.      PROPAGATION_REQUIRED,-Exception   
  9.     </prop>  
  10.     <prop key="delete*">  
  11.      PROPAGATION_REQUIRED,-Exception   
  12.     </prop>    
  13.     <prop key="update*">  
  14.      PROPAGATION_REQUIRED,-Exception   
  15.     </prop>           
  16.     <prop key="get*">PROPAGATION_REQUIRED</prop>  
  17.    </props>  
  18.   </property>  
  19.  </bean>  
Xml代码 复制代码
  1.  <bean  
  2.   class="<SPAN style="COLOR: #ff0000">org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator</SPAN>">  
  3.   <property name="beanNames">  
  4.    <value>*Service</value>  
  5.   </property>  
  6.   <property name="interceptorNames">  
  7.    <list>  
  8.     <value>transactionInterceptor</value>  
  9.    </list>  
  10.   </property>  
  11.  </bean>   

 

次配置关键在两个bean

TransactionInterceptor

BeanNameAutoProxyCreator

 

(3)基于注释式事务代理配置

posted on 2010-12-04 11:52 agun 阅读(455) 评论(0)  编辑  收藏 所属分类: java web架构设计与系统分析


只有注册用户登录后才能发表评论。


网站导航: