码迷,mamicode.com
首页 > 其他好文 > 详细

AOP获取方法注解实现动态切换数据源

时间:2019-07-22 17:55:07      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:执行   method   ice   not   public   pre   epo   col   自己   

 

AOP获取方法注解实现动态切换数据源

 

(其中@Order(1)作用:

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

@Order(1)
@Aspect
@Repository
public class DataSourceAspect {

    @Pointcut("execution(* com.xxx.service.impl.*.*(..))")
    private void anyMethod() {}

    @AfterReturning(value = "anyMethod()", returning = "result")
    public void afterReturning(JoinPoint joinPoint,Object result){
        DataSourceHolder.clearDataSourceType();
    }

    @Before(value="anyMethod()")
    public void before(JoinPoint joinPoint){
     //通过切点对象获取当前切点所在的方法对象 MethodSignature methodSignature
= (MethodSignature) joinPoint.getSignature(); Method method = methodSignature.getMethod(); //如果方法体上使用了DataSource注解 if (method.isAnnotationPresent(DataSource.class)) { //获取该方法上的注解名 DataSource datasource = method.getAnnotation(DataSource.class); //将方法体上的注解的值赋予给DataSourceHolder数据源持有类 DataSourceHolder.setDataSourceType(datasource.value()); } } }

 

AOP获取方法注解实现动态切换数据源

标签:执行   method   ice   not   public   pre   epo   col   自己   

原文地址:https://www.cnblogs.com/libin6505/p/11227267.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!