最近发现一个小问题,在自己的service中使用了声明式事务,并且在service前后使用了自定义AOP来记录日志,发现在service中发生异常时,连带自定义AOP中的记录log操作也会回滚,尝试在自定义AOP的方法中添加声明式事务来设置传播性(改成不启用事务以及启用新事务),然而均不起作用。后来想想两个都是用AOP来实现,执行起来的顺序估计有问题。
查找资料发现可以对多个AOP设置执行顺序,这种情况只要让自定义AOP在前,不包含在事务中,应该就能解决。
可以设置order参数,值越小,优先级越高,如果不设置,就是优先级最小。
比如:
设置事务的优先级 设置成2
- <!-- 采用@Transactional注解方式使用事务 -->
- annotation-driven transaction-manager="txManager" order="2"/>
设置自定义AOP的优先级 设置成1
经测试解决问题。
相关推荐
### Spring自定义切面事务问题 #### 背景与挑战 在开发基于Spring框架的应用程序时,我们经常需要利用AOP(面向切面编程)来实现横切关注点(如日志记录、安全控制、事务管理等)的模块化处理。其中,事务管理是...
Spring 声明式事务和 @Aspect 的拦截顺序问题的解决 Spring 框架中,声明式事务和 @Aspect 都可以用于实现Aspect-Oriented Programming(面向方面编程),但是它们的拦截顺序问题往往会导致很多问题。本文将详细...
总结来说,基于Spring AOP的声明式和编程式分布式锁,结合RedisTemplate、Redisson或Zookeeper,可以有效地解决分布式环境中的并发控制问题。这样的设计不仅简单易用,还能根据实际性能和环境需求灵活选择和扩展锁的...
其中,Spring AOP(面向切面编程)是解决横切关注点问题的一个重要工具,它允许我们把业务逻辑与系统服务如日志、事务管理等进行解耦。本文将深入探讨Spring AOP中的基于Schema配置方式,并通过实例来阐述其应用。 ...
Spring AOP,全称为Spring的面向切面编程,是一种编程范式,旨在将核心业务逻辑与横切关注点(如事务管理、日志记录、安全控制等)分离,以提高代码的可重用性和可维护性。AOP是基于IoC(Inversion of Control,控制...
6. 事务管理:Spring AOP的一个重要应用场景是事务管理,通过声明式事务管理,可以在切面中定义事务的开始、提交、回滚等行为,简化了事务处理代码。 总结来说,AOP的实现机制主要涉及切面、连接点、通知等概念,...
Spring通过AOP(面向切面编程)实现声明式事务,它会在事务边界自动处理开始、提交或回滚。 - **基于XML的配置**:配置文件中定义一个事务管理器,如`HibernateTransactionManager`,然后通过`<tx:advice>`和`<aop...
9.5.1. 理解Spring的声明式事务管理实现 9.5.2. 第一个例子 9.5.3. 回滚 9.5.4. 为不同的bean配置不同的事务语义 9.5.5. <tx:advice/> 有关的设置 9.5.6. 使用 @Transactional 9.5.6.1. @Transactional 有关的设置 ...
3. **声明式事务处理**:Spring通过AOP代理实现了声明式事务管理。开发者可以在服务层方法上添加@Transactional注解,由Spring自动处理事务的开始、提交或回滚。事务的隔离级别、传播行为和超时设置等都可以在配置中...
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 概览:** Spring Integration 是一个基于 Spring 框架的企业集成解决方案,它提供了一种声明式的、面向消息的方式来构建集成应用程序。 - **组件介绍:** Spring Integration 包括消息通道...
- **Easier configuration of declarative transactions in XML**: 在XML配置中简化了声明式事务的配置。 - **JPA**: 支持Java Persistence API,为持久化层提供了一致性的API接口。 - **Asynchronous JMS**: 提供...
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 ...
声明式事务管理通过@Transactional注解实现,它简化了事务处理,让代码更加整洁。 至于“说明.txt”,可能包含了关于如何阅读和利用这份指南的具体说明,比如阅读顺序、重点章节提示等。而“教程阅读器下载.url”...
**AOP(面向切面编程)**是Spring的另一个重要特性,它提供声明式事务管理,支持用户自定义的切面。AOP是对面向对象编程的补充,将程序分解为多个切面,便于管理和维护。AOP框架的特点是步骤间的良好隔离性和源代码...
- **2.4.1 更简单的声明式事务配置**:通过XML配置文件可以更容易地设置事务边界。 - **2.4.2 Java持久化API (JPA)**:支持JPA作为对象关系映射(ORM)的标准接口,简化了数据库操作。 - **2.4.3 异步JMS**:支持...
- **事务管理**:Spring的声明式事务管理也可以在父容器中配置,这样Web层的事务控制可以与其他业务逻辑保持一致。 理解SpringMVC的父子容器启动原理对于深度定制和优化SpringMVC应用至关重要。通过深入了解这一...
- 拦截器是Spring MVC中的一种AOP(面向切面编程)应用,它在DispatcherServlet处理请求之前或之后执行一些预处理或后处理任务。 - 通过实现HandlerInterceptor接口或者继承AbstractHandlerInterceptor类,我们...
- **2.5.7 声明式的模型验证**:引入了基于注解的模型验证机制。 - **2.5.8 先期对Java EE 6 的支持**:增加了对Java EE 6规范的支持。 - **2.5.9 嵌入式数据库的支持**:支持在开发过程中使用轻量级的嵌入式...