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

  • 相关阅读:
    完全背包
    01背包
    游戏编程:为什么C++游戏开发比Java更好,其实是因为这两个点!
    VS code搭建 C 和 C++ 环境的完整图文教程!赶紧收藏,这波不亏!
    来自清华计算机系的招聘信息,第一个要求就劝退99%的人!网友:但福利待遇真好!
    C++ 必看书籍清单!从C++ Primer 到 源码剖析,精通真的很难!
    C语言简单编程速成!保姆级入门教程, 目标达成!
    9 名程序员被抓!这次是真的活该.....
    你知道各类开发语言的薪酬差距吗?高薪在于适合,而不在于广度!
    apache common包 CollectionUtils 使用 详解
  • 原文地址:https://www.cnblogs.com/irobotzz/p/11910909.html
Copyright © 2011-2022 走看看