论坛首页 Java企业应用论坛

项目总结--事务管理自动代理

浏览 3622 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-02-10  

         项目使用了Spring的声明式事务管理,其是通过SpringAop实现的,主要是对于所有开发人员都是透明的,不用开发人员进行管理。同时使用了Spring的自动代理功能进行实现。

主要由一下几部分声明组成,需要注意的是,Spring对于关键的一些类不关心名称,只关心类型,它根据类型进行装配。

A)声明自动代理类

xml 代码
  1. <bean id="proxyCreator"  
  2.     class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" />  

 

2)事务拦截增强,定义一些事务管理的规则

xml 代码
  1. <bean id="txInterceptor"  
  2.     class="org.springframework.transaction.interceptor.TransactionInterceptor">  
  3.         <property name="transactionManager" ref="transactionManager" />  
  4.         <property name="transactionAttributes">  
  5.             <props>  
  6.                 <prop key="save*">  
  7. PROPAGATION_REQUIRED,-Exception   
  8. </prop>  
  9.                 <prop key="delete*">  
  10.                     PROPAGATION_REQUIRED,-Exception   
  11.                 </prop>  
  12.                 <prop key="get*">  
  13.                     PROPAGATION_REQUIRED,readOnly,-Exception   
  14.                 </prop>  
  15.                 <prop key="detail*">  
  16.                     PROPAGATION_REQUIRED,readOnly,-Exception   
  17.                 </prop>  
  18.                 <prop key="*">  
  19. PROPAGATION_REQUIRED,readOnly   
  20. </prop>  
  21.             </props>  
  22.         </property>  
  23.     </bean>  

 

3)定义pointcutadvice的装配器,即告知Spring,某个增强与某个切入点关联,在这里实现了一个切入点(pointcut) com.ufida.cvms.util.proxy.AutoLogicPointCut.

xml 代码
  1. <bean id="advisor"  
  2.     class="org.springframework.aop.support.DefaultPointcutAdvisor">  
  3.         <property name="pointcut">  
  4. <bean class="com.ABC.bcd.util.proxy.AutoLogicPointCut" />  
  5.         </property>  
  6.         <property name="advice">  
  7.             <ref bean="txInterceptor" />  
  8.         </property>  
  9. </bean>  

 

切入点代码如下,主要实现Pointcut接口即可以。GetClassFilter方法中判断符合切入点类的规则。GetMethodMatcher返回符合切入点类中方法的规则。在这里,只增强了DefaultLogic类,及其子类。方法是类中的所有方法。因为Logic是业务得重要操作地方,所以事务管理到Logic就可以了。

java 代码
  1. public class AutoLogicPointCut implements Pointcut {   
  2.   
  3.     /* (non-Javadoc)  
  4.      * @see org.springframework.aop.Pointcut#getClassFilter()  
  5.      */  
  6.     public ClassFilter getClassFilter() {   
  7.         return new RootClassFilter(DefaultLogic.class);   
  8.     }   
  9.   
  10.     /* (non-Javadoc)  
  11.      * @see org.springframework.aop.Pointcut#getMethodMatcher()  
  12.      */  
  13.     public MethodMatcher getMethodMatcher() {   
  14.         return MethodMatcher.TRUE;   
  15.     }   
  16.   
  17. }   

 

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics