• @Pointcut 使用


    目录

    作用

    使用

    定义切入点

    选择合适的切入方法


    作用

    抽取通用逻辑。

    使用

    1) 定义切入点;2) 选择合适的切入方法。

    范例(源自参考文章):注意代码中的注释

    1. //@1:这个类需要使用@Aspect进行标注
    2. @Aspect
    3. public class Aspect1 {
    4. //@2:定义了一个切入点,可以匹配Service1中所有方法
    5. @Pointcut("execution(* com.javacode2018.aop.demo9.test1.Service1.*(..))")
    6. public void pointcut1() {
    7. }
    8. //@3:定义了一个前置通知,这个通知对刚刚上面我们定义的切入点中的所有方法有效
    9. @Before(value = "pointcut1()")
    10. public void before(JoinPoint joinPoint) {
    11. //输出连接点的信息
    12. System.out.println("前置通知," + joinPoint);
    13. }
    14. //@4:定义了一个异常通知,这个通知对刚刚上面我们定义的切入点中的所有方法有效
    15. @AfterThrowing(value = "pointcut1()", throwing = "e")
    16. public void afterThrowing(JoinPoint joinPoint, Exception e) {
    17. //发生异常之后输出异常信息
    18. System.out.println(joinPoint + ",发生异常:" + e.getMessage());
    19. }
    20. }

    定义切入点

    切入点,即能通过@PointCut中的模式字符串匹配到的方法。模式字符串有多种写法,可以分为使用方法使用、实例使用三类

    方法使用:

    • execution:用于匹配方法执行的连接点
    • args:用于匹配当前执行的方法传入的参数为指定类型的执行方法
    • @args:用于匹配当前执行的方法传入的参数是指定类型的
    • @annotation:用于匹配当前执行方法持有指定注解的方法
    • 切点引入,在切点定义类中对应方法上定义@PointCut,然后在@Aspect类中使用完整方法路径()引用,以分离切点定义和使用,方便切点集中管理

    类使用:

    • within:用于匹配指定内的方法执行
    • this:用于匹配当前AOP代理对象的执行方法;注意是AOP代理对象的类型匹配,这样就可能包括引入接口也类型匹配
    • target:用于匹配当前目标对象的执行方法;注意是目标对象的类型匹配,这样就不包括引入接口也类型匹配
    • @within:用于匹配所以持有指定注解内的方法
    • @target:用于配当前目标对象的执行方法,其中目标对象持有指定的注解

    对象使用:

    • bean:Spring AOP扩展的,AspectJ没有对于指示符,用于匹配特定名称Bean对象的执行方法

    选择合适的切入方法

    @Before方法执行执行

    @Around:方法执行前后执行

    @After:在连接点方法完成之后执行,无论连接点方法执行成功还是出现异常都将执行后置方法

    @AfterRunning在方法成功执行返回结果之后执行

    @AfterThrowing:在方法抛错之后执行

    参考文章:

    https://cloud.tencent.com/developer/article/1655923

    https://blog.csdn.net/u010502101/article/details/78823056

  • 相关阅读:
    Shiro授权以及注解开发
    python图片合成
    2827. 范围中美丽整数的数目
    Python基于随机游走模型的PageRank算法及应用
    一起来学Kotlin:概念:13. Kotlin List, Set, Map, Sequence
    4WRBA6EB15-2X/G24N9Z4/M比例换向阀控制器
    Web安全之接口鉴权
    webserver(二)
    聊聊秒杀系统的设计(四)
    纯干货内容:关于ivx和mendix的对比 还在犹豫选择那个低代码平台的小伙伴看过来
  • 原文地址:https://blog.csdn.net/zcy_wxy/article/details/126896323