`

Spring 自定义AOP与声明式事务执行顺序问题

 
阅读更多

最近发现一个小问题,在自己的service中使用了声明式事务,并且在service前后使用了自定义AOP来记录日志,发现在service中发生异常时,连带自定义AOP中的记录log操作也会回滚,尝试在自定义AOP的方法中添加声明式事务来设置传播性(改成不启用事务以及启用新事务),然而均不起作用。后来想想两个都是用AOP来实现,执行起来的顺序估计有问题。

 

      查找资料发现可以对多个AOP设置执行顺序,这种情况只要让自定义AOP在前,不包含在事务中,应该就能解决。

      可以设置order参数,值越小,优先级越高,如果不设置,就是优先级最小。

      

比如:

 

设置事务的优先级 设置成2

 

[html] view plain copy
 
  1. <!-- 采用@Transactional注解方式使用事务 -->  
  2. annotation-driven transaction-manager="txManager" order="2"/>  

 

设置自定义AOP的优先级 设置成1

 

[java] view plain copy
 
  1. @Service  
  2. @Aspect  
  3. @Order(1)  
  4. public class LogAspect {  
  5. 。。。  
  6. }  



 


经测试解决问题。

分享到:
评论

相关推荐

    Spring自定义切面事务问题

    ### Spring自定义切面事务问题 #### 背景与挑战 在开发基于Spring框架的应用程序时,我们经常需要利用AOP(面向切面编程)来实现横切关注点(如日志记录、安全控制、事务管理等)的模块化处理。其中,事务管理是...

    Spring声明式事务和@Aspect的拦截顺序问题的解决

    Spring 声明式事务和 @Aspect 的拦截顺序问题的解决 Spring 框架中,声明式事务和 @Aspect 都可以用于实现Aspect-Oriented Programming(面向方面编程),但是它们的拦截顺序问题往往会导致很多问题。本文将详细...

    基于Spring AOP 的声明式和编程式分布式锁,支持RedisTemplate、Redisson、Zookeeper

    总结来说,基于Spring AOP的声明式和编程式分布式锁,结合RedisTemplate、Redisson或Zookeeper,可以有效地解决分布式环境中的并发控制问题。这样的设计不仅简单易用,还能根据实际性能和环境需求灵活选择和扩展锁的...

    Spring AOP之基于Schema配置总结与案例

    其中,Spring AOP(面向切面编程)是解决横切关注点问题的一个重要工具,它允许我们把业务逻辑与系统服务如日志、事务管理等进行解耦。本文将深入探讨Spring AOP中的基于Schema配置方式,并通过实例来阐述其应用。 ...

    SpringAOP原理及拦截器.doc

    Spring AOP,全称为Spring的面向切面编程,是一种编程范式,旨在将核心业务逻辑与横切关注点(如事务管理、日志记录、安全控制等)分离,以提高代码的可重用性和可维护性。AOP是基于IoC(Inversion of Control,控制...

    AOP的实现机制.

    6. 事务管理:Spring AOP的一个重要应用场景是事务管理,通过声明式事务管理,可以在切面中定义事务的开始、提交、回滚等行为,简化了事务处理代码。 总结来说,AOP的实现机制主要涉及切面、连接点、通知等概念,...

    Spring事务管理

    Spring通过AOP(面向切面编程)实现声明式事务,它会在事务边界自动处理开始、提交或回滚。 - **基于XML的配置**:配置文件中定义一个事务管理器,如`HibernateTransactionManager`,然后通过`&lt;tx:advice&gt;`和`&lt;aop...

    Spring-Reference_zh_CN(Spring中文参考手册)

    9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. &lt;tx:advice/&gt; 有关的设置 9.5.6. 使用 @Transactional 9.5.6.1. @Transactional 有关的设置 ...

    spring 源码解析

    3. **声明式事务处理**:Spring通过AOP代理实现了声明式事务管理。开发者可以在服务层方法上添加@Transactional注解,由Spring自动处理事务的开始、提交或回滚。事务的隔离级别、传播行为和超时设置等都可以在配置中...

    Spring.3.x企业应用开发实战(完整版).part2

    9.6 使用注解配置声明式事务 9.6.1 使用@Transactional注解 9.6.2 通过AspectJ LTW引入事务切面 9.7 集成特定的应用服务器 9.7.1 BEA WebLogic 9.7.2 BEA WebLogic 9.8 小结 第10章 Spring的事务管理难点剖析 10.1 ...

    spring integration in action

    - **Spring Integration 概览:** Spring Integration 是一个基于 Spring 框架的企业集成解决方案,它提供了一种声明式的、面向消息的方式来构建集成应用程序。 - **组件介绍:** Spring Integration 包括消息通道...

    spring-reference.pdf

    - **Easier configuration of declarative transactions in XML**: 在XML配置中简化了声明式事务的配置。 - **JPA**: 支持Java Persistence API,为持久化层提供了一致性的API接口。 - **Asynchronous JMS**: 提供...

    Spring3.x企业应用开发实战(完整版) part1

    9.6 使用注解配置声明式事务 9.6.1 使用@Transactional注解 9.6.2 通过AspectJ LTW引入事务切面 9.7 集成特定的应用服务器 9.7.1 BEA WebLogic 9.7.2 BEA WebLogic 9.8 小结 第10章 Spring的事务管理难点剖析 10.1 ...

    spring开发指南

    声明式事务管理通过@Transactional注解实现,它简化了事务处理,让代码更加整洁。 至于“说明.txt”,可能包含了关于如何阅读和利用这份指南的具体说明,比如阅读顺序、重点章节提示等。而“教程阅读器下载.url”...

    Spring学习笔记系列之三

    - **事务管理**:Spring的声明式事务管理也可以在父容器中配置,这样Web层的事务控制可以与其他业务逻辑保持一致。 理解SpringMVC的父子容器启动原理对于深度定制和优化SpringMVC应用至关重要。通过深入了解这一...

    Spring入门

    - **定义**:通过Spring的声明式事务管理机制来管理Hibernate事务。 - **示例**:在Hibernate相关的DAO方法上添加`@Transactional`注解。 #### AOP概念 - **定义**:面向切面编程(Aspect Oriented Programming, ...

    spring mvc_09

    - 拦截器是Spring MVC中的一种AOP(面向切面编程)应用,它在DispatcherServlet处理请求之前或之后执行一些预处理或后处理任务。 - 通过实现HandlerInterceptor接口或者继承AbstractHandlerInterceptor类,我们...

Global site tag (gtag.js) - Google Analytics