• @Aspect:将此类标记为一个Advisor。
  • @EnableAspectJAutoProxy ** 表示若spring创建的对象如果实现了接口,默认使用jdk动态代理,如果没有实现接口,使用cglib创建代理对象。@EnableAspectJAutoProxy(proxyTargetClass = true)将只使用cglib。SpringBoot默认会配置EnableAspectJAutoProxy,可以通过spring.aop.prox-target-class设置proxyTargetClass ,默认是true(既只使用cglib)。

@AspectJ形式的Pointcut

  • 在方法上使用@Pointcut()注解

  • 标志符

    • execution(方法类型?返回值类型 包名.类名.方法名(参数))

      • *可以匹配相邻多个字符
      • …可以表示多层包和多个方法名。
      • Spring AOP的@Pointcut与@DeclareParents
    • within:拦截指定类型下面的所有方法。

      • Spring AOP的@Pointcut与@DeclareParents
    • this和target

      • this拦截的是目标对象的代理对象,target拦截的是目标对象。
    • args:根据参数类型拦截,参数类型子类也会被拦截。

      • Spring AOP的@Pointcut与@DeclareParents
    • @annotation:匹配标注了指定注解的方法。比如此处被我的MyAspectAnnotation标记的方法就会被拦截。

      Spring AOP的@Pointcut与@DeclareParents

    • @args:匹配方法参数所属的类型上有指定的注解的参数的方法。

    • @within:用@within指定了某种类型的注解,标准了此类注解的对象的所有方法都会被匹配。@within属于静态匹配

    • @target:用@target指定了某种类型的注解,标准了此类注解的对象的所有方法都会被匹配。@target属于动态匹配

@DeclareParents:为指定value的类增加一个目标接口,方法实现由defaultImpl指定的类实现。

Spring AOP的@Pointcut与@DeclareParents

Spring AOP的@Pointcut与@DeclareParents

Spring AOP的@Pointcut与@DeclareParents

既使用此注解后,ClassA就相当于变成了:

Spring AOP的@Pointcut与@DeclareParents

相关文章:

  • 2022-12-23
  • 2021-12-27
  • 2021-09-08
  • 2022-12-23
  • 2022-03-06
  • 2021-07-08
  • 2022-02-03
  • 2021-11-12
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-06-18
  • 2021-09-04
  • 2021-12-27
相关资源
相似解决方案