Srping AOP 声明式事务管理 业务层重构 Junit遇到的问题

今天遇到的问题如下:

oa项目中,使用到了Spring的AOP对Manager Layer的CUD操作进行了声明式事务管理,相关代码如下:

<!-- 配置事务的传播特性 -->
 	<tx:advice id="txAdvice" transaction-manager="transactionManager" >
 		<tx:attributes>
 			<tx:method name="add*" propagation="REQUIRED"/>
 			<tx:method name="del*" propagation="REQUIRED"/>
 			<tx:method name="update*" propagation="REQUIRED"/>
 			<tx:method name="*" read-only="true"/>
 		</tx:attributes>
 	</tx:advice>
 	
 	<!-- 配置哪些类哪些方法使用事务 -->
 	<aop:config>
 		<aop:pointcut id="allManagerMethod" expression="execution(* com.hiaward.oa.manager.*.*(..))"/>
 		<aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/>
 	</aop:config>

 

之前测试过一个OrganizationManagerImpl时CUD操作都是成功的。但今天在测试一个新的Manager Layer PersonManagerImpl的时候,却出现了如下的情况:

Hibernate: insert into T_Person (name, sex, age, address, duty, phone, org_id) values (?, ?, ?, ?, ?, ?, ?)

但对应的表 t_person 里边却没有这条记录,当时第一反映就是事务的问题,于是返回头去测试了下原来 OrganizationManagerImpl的add*方法,居然也是同样的情况,这叫我有点迷,为什么呢?肯定是自己在这中间改了什么设置,是什么呢? 噢,当我看到<aop:pointcut id="allManagerMethod" expression="execution(* com.hiaward.oa.manager.*.*(..))"/>这句时,一下子想到了,由于一开始的设计问题,我曾对Manager Layer的包名进行了重构,把原来的包名 com.hiaward.oa.manager 重构为 现在的 com.hiaward.oa.managers 而配置文件中的相关部分却忘记了重构,所以导致了这个问题。于是按照想法改了过来,重新测试2个 *ManagerImpl,均成功通过。

总结:当遇到这个问题的时候,一开始定位到了是事务的问题,后来依次寻源,终于找到症结。

你可能感兴趣的:(spring,AOP,JUnit,配置管理,项目管理)