• 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

  • 相关阅读:
    Mysql升级过程的问题
    关于SSM项目注解事务不回滚的问题
    Linux环境下tomcat如何热部署
    Windows系统下python3中安装pyMysql
    jvm性能监控及故障处理工具(《深入理解java虚拟机》)
    jvm垃圾回收器(《深入理解java虚拟机》)
    jvm-运行时数据区域(《深入理解java虚拟机》)
    java源码分析-String
    java源码分析-Object
    2019秋季PAT甲级题解(无第一题)
  • 原文地址:https://www.cnblogs.com/irobotzz/p/11910909.html
Copyright © 2020-2023  润新知