`

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,均成功通过。

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

0
0
分享到:
评论

相关推荐

    Spring.docx

    5. **Spring 事务管理**:了解如何进行声明式事务管理和编程式事务管理。 6. **数据库访问**:使用 JdbcTemplate 或其他 ORM 工具与数据库交互。 7. **Spring 工具类和扩展**:如 Spring Boot、Spring Data、Spring ...

    spring培训第三天

    5. **事务管理**:Spring的声明式事务管理使得在多层架构中处理事务变得更加简单。我们可以在配置文件或注解中声明事务边界,由Spring自动处理事务的开始、提交、回滚。 6. **Spring MVC**:对于Web应用,Spring ...

    spring3.1包名解析

    16. `org.springframework.transaction-3.1.0.M1.jar`: 提供了声明式和编程式事务管理,支持JDBC、Hibernate、JDO、JPA等多种数据访问技术。 17. `org.springframework.web.portlet-3.1.0.M1.jar`: 专为portlet环境...

    java_spring_day05.pdf

    Spring框架提供了强大的事务管理机制,支持声明式事务管理和编程式事务管理两种方式。通过Spring事务管理器,开发者可以方便地控制事务的边界,确保数据的一致性和完整性。 **详细内容:** 1. **声明式事务管理:*...

    spring-framework-3.0.0.RELEASE.7z

    Spring的AOP模块提供了一种声明式处理横切关注点的方式,如日志、事务管理等。3.0.0.RELEASE中,AOP支持基于注解的切面定义,通过@Aspect、@Before、@After等注解,可以轻松创建和管理切面。 4. **MVC框架的增强**...

    java开发工程师-xx简历.docx

    他对Spring框架的IOC、DI、AOP编程、声明式事务处理和代理模式有熟练应用,且掌握了Hibernate框架,能够进行一对多、多对多的关系映射,使用HQL,理解对象状态转换和数据缓存机制。 此外,他还擅长使用SpringMVC和...

    精通JavaEE项目案例基于EclipseSpringStrutsHibernate(光盘6)

    此外,Spring还包含了对AOP(面向切面编程)、事务管理、数据访问集成等企业级功能的支持。 Struts是MVC(Model-View-Controller)设计模式的一个实现,主要处理Web层的逻辑。它将业务逻辑、表示层和数据访问层解耦...

    nutz-1.b.40-manual.pdf

    2. **薄封装**:针对JDBC进行了轻度封装,简化了数据库操作的同时避免了复杂的缓存管理问题,使得数据库交互更加直接高效。 3. **全面的功能覆盖**:提供了Dao (ORM, SQL管理), Ioc, Aop, Mvc, Json解析等多种必要...

    春天-tdd

    7. **Spring Data**:对于数据访问层,Spring Data提供了一种声明式的方式进行CRUD操作,同时也支持JPA和JDBC的测试场景。 8. **RESTful API测试**:如果项目涉及到Web服务,可能会使用`MockMvc`进行REST API的...

    CarnaticMusicWeb:Carnatic音乐网站

    对于复杂的查询和事务管理,Hibernate提供了一种声明式的方法,减少了手动SQL编写的工作量。 前端界面的重构可以选择使用Java的Vaadin或AngularJS框架。Vaadin是一个基于GWT的现代Web应用框架,它允许开发人员用...

Global site tag (gtag.js) - Google Analytics