使用Spring AOP结合自定义Java注解实现动态数据源设置

1、定义Java注解

@Retention(RetentionPolicy.RUNTIME)
// 注解将要写到类型(Class/Interface)还是其它元素(Method等)上,支持package、type、method、field等,一般只会配置一个
@Target({ElementType.TYPE}) public @interface DataSource { String value();}


2、定义切点

(1)定义一个空方法

(2)使用@Piontcut标注,填入切点表达式

(3)示例

    @Pointcut("execution (* com.rrfare.dao.*.* (..))")   // 在执行com.rrfare.dao下面所有类型的所有方法时生效!
    public void dataOperationCut(){};

    @Before("dataOperationCut()")
    public void doBefore(JoinPoint jp) {
        // doSomething
    }
(4)切点表达式(@Pointcut后面括号内的内容)的有效格式

         execution:用于匹配方法执行的连接点;

         within:用于匹配指定类型内的方法执行;

         this:用于匹配当前AOP代理对象类型的执行方法;注意是AOP代理对象的类型匹配,这样就可能包括引入接口也类型匹配;

         target:用于匹配当前目标对象类型的执行方法;注意是目标对象的类型匹配,这样就不包括引入接口也类型匹配;

         args:用于匹配当前执行的方法传入的参数为指定类型的执行方法;

         @within:用于匹配所以持有指定注解类型内的方法;

         @target:用于匹配当前目标对象类型的执行方法,其中目标对象持有指定的注解;

         @args:用于匹配当前执行的方法传入的参数持有指定注解的执行;

         @annotation:用于匹配当前执行方法持有指定注解的方法;

         bean:Spring AOP扩展的,AspectJ没有对于指示符,用于匹配特定名称的Bean对象的执行方法;

         reference pointcut:表示引用其他命名切入点,只有@ApectJ风格支持,Schema风格不支持

3、第1步和第2步没有任何关系

4、动态数据源的实现思路

(1)Spring提供了Dynamic DataSource机制

(2)在需要切换数据源的位置(Class、Interface、Method等的上面)定义Java注解

(3)使用AOP对以上位置进行拦截,并解析出Java注解,根据具体值来动态设置数据源



 



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值