AOP入门

xml配置

<!-- AOP起步依赖,无需指定版本,父工程已经管理 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

常见的通知类型有哪些?分别在什么时候执行 a. @Before(前置通知) b. @After(后置通知) c. @Around(环绕通知,重点) d. @AfterReturning(返回后通知) e. @AfterThrowing(异常后通知)

@PointCut注解的作用是什么?

抽取公共的切点表达式,提高复用性
这些通知类型是Spring AOP中用于定义不同阶段的横切关注点的注解。@Before用于在目标方法执行之前执行;@After用于在目标方法执行之后执行,无论方法是否正常结束;@Around可以包围目标方法的执行,是最为灵活的通知类型;@AfterReturning用于在目标方法成功返回后执行;@AfterThrowing用于在目标方法抛出异常后执行。@PointCut注解用于定义切入点,它允许你指定哪些方法将被通知,这样可以提高代码的复用性。


执行顺序

不同切面类中,默认按照切面类的类名字母排序:

目标方法前的通知方法:字母排名靠前的先执行。
目标方法后的通知方法:字母排名靠前的后执行。


用 @Order(数字) 加在切面类上来控制顺序:

目标方法前的通知方法:数字小的先执行。
目标方法后的通知方法:数字小的后执行。


execution切入点表达式的完整语法?

execution(访问修饰符? 返回值 包名.类名.? 方法名(方法参数) throws 异常?)
通配符有哪些?

*:单个独立的任意符号
..:多个连续的任意符号


书写建议

所有业务方法名在命名时尽量规范,方便切入点表达式快速匹配。如:findXxx,updateXxx。
描述切入点方法通常基于接口描述,而不是直接描述实现类,增强拓展性。
在满足业务需要的前提下,尽量缩小切入点的匹配范围。如:包名尽量不使用..,使用*匹配单个包。


@annotation切入点表达式,用于匹配标识有特定注解的方法。
@annotation表达式允许你指定一个注解,AOP框架会匹配所有带有这个注解的方法作为切入点。这使得你能够基于方法上的注解来定义切面,而不是基于方法的签名或者其他属性。这样可以提高代码的模块化和重用性,因为你可以根据注解来应用横切关注点,而不是硬编码方法名或者类名。


spring中用JoinPoint抽象了连接点,用它可以获得方法执行时的相关信息,如目标类名、方法名、方法参数等。

对于@Around通知,获取连接点信息只能使用ProceedingJoinPoint。
对于其它四种通知(@Before、@After、@AfterReturning、@AfterThrowing),获取连接点信息只能使用JoinPoint,它是ProceedingJoinPoint的父类型。

JoinPoint是AOP中用于表示程序执行过程中的某个点(如方法执行前后)的抽象概念。ProceedingJoinPoint是JoinPoint的子接口,它提供了额外的能力,允许你在环绕通知(@Around)中调用目标方法。其他通知类型使用JoinPoint来获取关于当前执行方法的信息,但它们不能调用目标方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值