• Spring AOP 通过order来指定顺序


    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt398

    Spring中的事务是通过aop来实现的,当我们自己写aop拦截的时候,会遇到跟spring的事务aop执行的先后顺序问题,比如说动态切换数据源的问题,如果事务在前,数据源切换在后,会导致数据源切换失效,所以就用到了Order(排序)这个关键字.

            我们可以通过在@AspectJ的方法中实现org.springframework.core.Ordered 这个接口来定义order的顺序,order 的值越小,说明越先被执行。比如代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    @Component
    @Aspect
    public class AspectJ4DataBase implements Ordered {
        //拦截所有的service操作
        @Pointcut("execution( * com.hc.shop.*.service.*.*(..))")
        public void readMethod() {
        }// 匹配所有的读取操作
     
        @Before("readMethod()")
        public void onlyReadPre() {
            DataSourceContextHolder.setDataSourceType(DataSourceType.MYSQL);
            System.out.println("数据库切换MYSQL");
        }
     
        @After("readMethod()")
        public void onlyReadPast() {
            DataSourceContextHolder.setDataSourceType(DataSourceType.ORACLE);
            System.out.println("数据库切换回ORACLE");
        }
     
        @Override
        public int getOrder() {
    // TODO Auto-generated method stub
            return 1;
        }
    }

        在事务配置的地方也配置order 字段,代码如下:    

    <!-- 注解方式配置事物 -->

    1
    <tx:annotation-driven transaction-manager="transactionManager" order="2"/>

    这样就实现了我们自己写的aop在事务介入之前就执行了!

  • 相关阅读:
    GATK-BWA-MEM handle GRCh38 alternate contig mappings
    GATK使用说明-GRCh38(Genome Reference Consortium)(二)
    GATK使用说明(一)
    [python] 线程池
    [python] 线程锁
    [python] 线程简介
    [linux] 更改目录显示颜色
    限制登录次数
    项目经验总结-twice
    Java泛型底层源码解析--ConcurrentHashMap(JDK1.6/JDK1.7/JDK1.8)
  • 原文地址:https://www.cnblogs.com/grefr/p/6087995.html
Copyright © 2020-2023  润新知