@Pointcut 使用

简介: @Pointcut 使用

作用

抽取通用逻辑。

使用

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

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

    //@1:这个类需要使用@Aspect进行标注
    @Aspect
    public class Aspect1 {
   

        //@2:定义了一个切入点,可以匹配Service1中所有方法
        @Pointcut("execution(* com.javacode2018.aop.demo9.test1.Service1.*(..))")
        public void pointcut1() {
   
        }

        //@3:定义了一个前置通知,这个通知对刚刚上面我们定义的切入点中的所有方法有效
        @Before(value = "pointcut1()")
        public void before(JoinPoint joinPoint) {
   
            //输出连接点的信息
            System.out.println("前置通知," + joinPoint);
        }

        //@4:定义了一个异常通知,这个通知对刚刚上面我们定义的切入点中的所有方法有效
        @AfterThrowing(value = "pointcut1()", throwing = "e")
        public void afterThrowing(JoinPoint joinPoint, Exception e) {
   
            //发生异常之后输出异常信息
            System.out.println(joinPoint + ",发生异常:" + e.getMessage());
        }

    }

定义切入点

切入点,即能通过@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

目录
相关文章
|
4月前
|
监控 Java API
Spring Boot中的切面AOP处理
AOP(面向切面编程)旨在分离关注点,将核心业务与辅助逻辑解耦。通过Spring Boot中的@Aspect、@Pointcut、@Before、@After等注解,可实现日志记录、性能监控、事务管理等功能,提升代码模块化与可维护性,灵活应对业务变化。
|
SQL 算法 关系型数据库
Mybatis-Plus3.0默认主键策略导致自动生成19位长度主键id的坑
Mybatis-Plus3.0默认主键策略导致自动生成19位长度主键id的坑
460 0
|
Java 测试技术 Spring
Springboot单元测试
Springboot单元测试
660 0
Springboot单元测试
|
缓存 Java Spring
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
文章比较了在Servlet和Spring Boot中获取Cookie、Session和Header的方法,并提供了相应的代码实例,展示了两种方式在实际应用中的异同。
1747 3
servlet和SpringBoot两种方式分别获取Cookie和Session方式比较(带源码) —— 图文并茂 两种方式获取Header
|
Java API Spring
SpringBoot项目调用HTTP接口5种方式你了解多少?
SpringBoot项目调用HTTP接口5种方式你了解多少?
3128 2
|
2月前
|
Linux API iOS开发
OpenClaw(原Moltbot/Clawdbot)一键部署,与配置阿里云百炼Coding Plan API Key教程
OpenClaw(原Moltbot、Clawdbot)是一款开源AI个人助手,支持本地部署,兼容MacOS、Windows及Linux等多种系统,可接入钉钉、飞书、WhatsApp等常用聊天工具,通过自然语言控制设备和服务。它具备强大的自动化能力,支持Qwen、Claude、GPT等主流大语言模型,能处理邮件、日程安排、市场调研等多种自动化任务,还可作为个人知识库使用。本文将详细拆解OpenClaw的部署流程、阿里云百炼API配置步骤,以及百炼Coding Plan套餐的适配方法,严格遵循原文档逻辑,确保不改变原意。
4953 0
|
消息中间件 测试技术 领域建模
DDD - 一文读懂DDD领域驱动设计
DDD - 一文读懂DDD领域驱动设计
49606 6
|
存储 SQL JSON
5、DataX(DataX简介、DataX架构原理、DataX部署、使用、同步MySQL数据到HDFS、同步HDFS数据到MySQL)(一)
5、DataX(DataX简介、DataX架构原理、DataX部署、使用、同步MySQL数据到HDFS、同步HDFS数据到MySQL)(一)
|
Java Maven 微服务
SpringCloud学习(十一):OpenFeign的使用
在没有feign之前,我们的客户端使用的是ribbon+restTemplate。 OpenFeign的使用其实就是 微服务调用接口+@FeignClient注解
605 0
SpringCloud学习(十一):OpenFeign的使用