AOP自定义注解定位简介

业务场景

使用aop时需要编写切入点表达式来进行方法定位。
当在编写过程中代理需求频繁变化导致目标对象频繁变化时,就需要重新编写表达式。
如果能在aop操作编写完成的情况下,利用注解进行定位的话,无论后期需求怎么修改,都只需要在编写时顺手在需要代理的位置添加或删除注解即可。

前置技能

  1. AOP编程方法;
  2. 自定义注解;
  3. Java反射。

例子

  1. 首先编写我们的切面类AspectDemo:
@Aspect
@Component
public class AspectDemo {

   /**
    * 定义切点
    */
   @Pointcut("/**待编写**/")
   private void point() {
   }
   
   /**
    * 计时
    *
    * @param proceedingJoinPoint 运行态连接点
    */
   @Around("logPoint()")
   private Object access(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
       /**前置操作**/
       Object res = proceedingJoinPoint.proceed(); // 运行
      	/**后置操作**/
       return res;
   }

}
  1. 自定义注解。可以自己选择是否需要参数,以便在切面方法中让用户自定义一些操作。
    这里需要注意的是,必须要添加“@Retention(RetentionPolicy.RUNTIME)”,否则注解类不参与编译,在后续使用该注解类的地方就会抛异常;
    @Target中声明注解修饰目标,这里选择了类和方法;
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AnnotationDemo {
}
  1. 在PointCut中补全表达式如下,表达式中可以使用“&&”、“||”等逻辑运算符,@annotation匹配对应注解参数修饰的方法,@within匹配对应注解参数修饰的具体类:
@Pointcut("@annotation(InBucket) || @within(InBucket)")

(完整的切入点语法 自行百度 参考别处)

你可能感兴趣的:(AOP自定义注解定位简介)