美文网首页
记录一次AOP存在的问题

记录一次AOP存在的问题

作者: BestbpF | 来源:发表于2019-06-20 16:14 被阅读0次

简述

之前在项目中,使用到了多数据源切换,采用了AOP加自定义注解的方式去实现,但是当一个方法被同时标注有该注解以及@Transactional注解时,导致数据源一直是默认数据源,无法切换。

原因所在

当一个方法被两个切面增强时,两个切面的顺序是关键,使用@Order注解或者实现Ordered接口可以指定顺序,由开启注解式事务的注解@EnableTransactionManagement源码可知order默认为最大值Ordered.LOWEST_PRECEDENCE(2147483647),即最晚加载,但即便如此,标注有@Order的也要先于没有标注的切面优先执行。所以事务开启后,数据源此时还没有切换,即使后面AOP进行切换,事务管理器的数据源也不会发生变化。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(TransactionManagementConfigurationSelector.class)
public @interface EnableTransactionManagement {
    boolean proxyTargetClass() default false;
    AdviceMode mode() default AdviceMode.PROXY;
    int order() default Ordered.LOWEST_PRECEDENCE;
}

解决

在切面上标注@Order注解,并指定大小,小于Ordered.LOWEST_PRECEDENCE(2147483647)即可

相关文章

  • 记录一次AOP存在的问题

    简述 之前在项目中,使用到了多数据源切换,采用了AOP加自定义注解的方式去实现,但是当一个方法被同时标注有该注解以...

  • [Spring] Web层AOP方式进行参数校验

    Spring的AOP方式有很多用途,本次记录其使用AOP的方式处理Controller层参数校验问题 思路 使用 ...

  • AOP之日志记录

    IOC常有,而AOP不常有也。我很少使用AOP,学了ssm这么长时间项目中还是第一次用,据说AOP可以用来日志记录...

  • Spring之AOP(一)

    一、AOP的基础 1.1、AOP是什么??? 考虑这样一个问题:需要对系统中的某些业务做日志记录,比如支付系统中的...

  • Android切面(AOP)的使用 二

    大纲如下: AOP 是什么? AOP 是一种技术,只存在web服务端么? AOP 与OOP 的关系以及存...

  • Android切面(AOP)的使用 一

    大纲如下: AOP 是什么? AOP 是一种技术,只存在web服务端么? AOP 与OOP 的关系以及存...

  • SpringBoot 2.2.5 配置AOP,实现API接口请求

    前言:该博客主要是记录自己学习的过程,方便以后查看,当然也希望能够帮到大家。 说明 Spring的AOP的存在目的...

  • Spring父子容器问题

    这个问题老早就存在了,只是今天组长让我看AOP不生效的时候,才真实遇到这个问题,之前都是用的Spring Boot...

  • Spring 源码(六)Spring AOP源码解析

    AOP 面向切面编程,相对于OOP面向对象编程。 Spring AOP存在的目的是为了解耦。AOP可以让一组类共享...

  • 结合实际研发经验讲解spring核心模块aop

    AOP:是Spring的AOP库,提供了拦截器的机制。 AOP面向切面编程,基于代理设计模式。 主要功能:日志记录...

网友评论

      本文标题:记录一次AOP存在的问题

      本文链接:https://www.haomeiwen.com/subject/ordjqctx.html