- @Aspect:将此类标记为一个Advisor。
- @EnableAspectJAutoProxy ** 表示若spring创建的对象如果实现了接口,默认使用jdk动态代理,如果没有实现接口,使用cglib创建代理对象。@EnableAspectJAutoProxy(proxyTargetClass = true)将只使用cglib。SpringBoot默认会配置EnableAspectJAutoProxy,可以通过spring.aop.prox-target-class设置proxyTargetClass ,默认是true(既只使用cglib)。
@AspectJ形式的Pointcut
-
在方法上使用@Pointcut()注解
-
标志符
-
execution(方法类型?返回值类型 包名.类名.方法名(参数))
- *可以匹配相邻多个字符
- …可以表示多层包和多个方法名。
-
within:拦截指定类型下面的所有方法。
-
this和target:
- this拦截的是目标对象的代理对象,target拦截的是目标对象。
-
args:根据参数类型拦截,参数类型子类也会被拦截。
-
@annotation:匹配标注了指定注解的方法。比如此处被我的MyAspectAnnotation标记的方法就会被拦截。
-
@args:匹配方法参数所属的类型上有指定的注解的参数的方法。
-
@within:用@within指定了某种类型的注解,标准了此类注解的对象的所有方法都会被匹配。@within属于静态匹配
-
@target:用@target指定了某种类型的注解,标准了此类注解的对象的所有方法都会被匹配。@target属于动态匹配
-
@DeclareParents:为指定value的类增加一个目标接口,方法实现由defaultImpl指定的类实现。
既使用此注解后,ClassA就相当于变成了: