首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Spring AOP 事宜与继承

2013-04-09 
Spring AOP 事务与继承我创建一个抽象类 AbstractBaseService,里面定义了一些公用方法,然后UserService继

Spring AOP 事务与继承
我创建一个抽象类 AbstractBaseService,里面定义了一些公用方法,然后UserService继承了它。
在配置文件中对UserService配置了事务管理。
今天在写测试用例时通过分析MySQL的日志发现,对于AbstractBaseService提供的getById方法,居然没有没有启用事务管理,每次都是SET autocommit=1。
后来经过分析才发现:
虽然在Spring中配置了对UserService中的所有方法使用事务管理,但是没有配置对AbstractBaseService进行事务管理(在这种情况下要想启用事务管理必须Override每个超类的中方法)。
另外一种做法是利用切入点声明需要关注的AbstractBaseService中的哪些方法,通知与UserService和AbstractBaseService相关联:
所以需要在<aop:config>中添加针对AbstractBaseService的<aop:pointcut>配置以及<aop:advisor>配置,具体如下:
  <aop:config>
    <aop:pointcut id="userInterceptorPointCuts" expression="execution(* com.travel.user.service.impl.*.*(..))" />
    <aop:pointcut id="abstractBaseServiceInterceptorPointCuts" expression="execution(* com.travel.common.AbstractBaseService.*(..))" />
    <aop:advisor advice-ref="txUserAdvice" pointcut-ref="userInterceptorPointCuts" />  
    <aop:advisor advice-ref="txUserAdvice" pointcut-ref="abstractBaseServiceInterceptorPointCuts" />      
  </aop:config>

热点排行