zoukankan      html  css  js  c++  java
  • SpringBoot AOP注解式拦截与方法规则拦截

         AOP的本质还是动态代理对方法调用进行增强。

      SpringBoot 提供了方便的注解实现自定义切面Aspect。

      1、使用需要了解的几个概念:

                切面、@Aspect

                切点、@Pointcut、

                通知、@Before/@After/@Around/@AfterReturning/@AfterThrowing

      2、Pointcut expression表达式规则 

        Pointcut 是指那些方法需要被执行"AOP",是由"Pointcut Expression"来描述的.
        Pointcut可以有下列方式来定义或者通过通配符&& || !的方式进行组合.


        args()、@args() 

        execution()

        this()

        target() 、@target()

           within()、@within()

        @annotation

    举例说明:
      任意公共方法的执行:
      execution(public * *(..))

      任何一个以“set”开始的方法的执行:
      execution(* set*(..))‘


      AccountService 接口的任意方法的执行:
      execution(* com.xyz.service.AccountService.*(..))

      定义在service包里的任意方法的执行:
      execution(* com.xyz.service.*.*(..))

      定义在service包和所有子包里的任意类的任意方法的执行:
      execution(* com.xyz.service..*.*(..))

      定义在pointcutexp包和所有子包里的JoinPointObjP2类的任意方法的执行:
      execution(* com.test.spring.aop.pointcutexp..JoinPointObjP2.*(..))")
      ***> 最靠近(..)的为方法名,靠近.*(..))的为类名或者接口名,如上例的JoinPointObjP2.*(..))

      pointcutexp包里的任意类.
      within(com.test.spring.aop.pointcutexp.*)


      pointcutexp包和所有子包里的任意类.
      within(com.test.spring.aop.pointcutexp..*)


      实现了Intf接口的所有类,如果Intf不是接口,限定Intf单个类.
      this(com.test.spring.aop.pointcutexp.Intf)
      ***> 当一个实现了接口的类被AOP的时候,用getBean方法必须cast为接口类型,不能为该类的类型.

      带有@Transactional标注的所有类的任意方法.
      @within(org.springframework.transaction.annotation.Transactional)
      @target(org.springframework.transaction.annotation.Transactional)

      带有@Transactional标注的任意方法.
      @annotation(org.springframework.transaction.annotation.Transactional)
      ***> @within和@target针对类的注解,@annotation是针对方法的注解

      参数带有@Transactional标注的方法.
      @args(org.springframework.transaction.annotation.Transactional)


      参数为String类型(运行是决定)的方法.
      args(String)

        

    这篇文章写得不错可参考:https://www.jianshu.com/p/fbbdebf200c9

  • 相关阅读:
    java8
    java8
    java8
    java8
    java8
    java8
    java8
    java8
    GUC-13 生产者和消费者案例-旧
    GUC-14 ForkJoin
  • 原文地址:https://www.cnblogs.com/irobotzz/p/11910909.html
Copyright © 2011-2022 走看看