AOP快速入门
2025-4-20
| 2025-4-20
Words 1184Read Time 3 min
type
status
date
slug
summary
tags
category
icon
password

什么是AOP

面向切面编程
我们都听说过面向对象编程,整个程序是由对象组装的。而面向切面编程,就是把一些功能实现当成一个切面,通过配置,可以把一段代码切入到程序的前面,后面,异常等。
notion image
image-20230216140254184
可以在切面类里面写很多方法,切面类的方法可以根据需要插入到指定的地方。

快速入门

  • 引入包aspectj
  • 通知方法
    • 前置通知:@Before
      • 对应上一节代码中的方法执行前的通知。
    • 返回通知:@AfterReturning
      • 对应执行完业务代码之后执行的代码
    • 异常通知:@AfterThrowing
      • 发生异常时执行的代码
    • 后置通知:@After
      • 对应插入finally代码块中的方法
    • 环绕通知:@Around
      • 相当于统一管理。

需求说明

使用aop编程的方式,重构上一节使用动态代理的方式写的代码

切面类

  1. 现在使用aspectj包来使用,那么对象都交给spring来管理。
  1. 使用@aspect注解,代替了之前的 VehicleAnimalProvider类。
  1. @Before代表是一个前置通知。
  1. value,exection代表插入的是哪个方法,带上方法全路径和参数类型可以唯一确定一个方法。
  1. JoinPoint,在底层执行的时候,会给插入的方法封装成JoinPoint,可以获取到方法名,参数等信息。

代码

扫描包注入对象

测试

通过接口的方式注入对象,输出类型为代理对象,这就和之前的类似了,先获取代理对象,通过代理对象执行方法,代理对象会把,代理对象会把对应的方法切入进去。
notion image
image-20230216151539056

而直接获取对象会失败

因为如果使用了aop,底层是动态代理,那么就不能直接获取对象执行方法,因为这样就绕过了代理对象,aop的功能就体现不出来了。
notion image
image-20230216151651267

其他方法切入到其他位置

结果

notion image
image-20230216162539929

SpringAOP注意事项

切入多个方法

模糊配置,可以覆盖到其他方法
notion image
image-20230216162250258

开启aop注解功能

如果把<aop:aspectj-autoproxy/>配置去掉,那么aop功能就会失效
notion image
image-20230216162515961
需要以接口的类型来获取对象,因为需要使用动态代理的方式实现切面编程,所以不能直接获取对象执行方法。
但如果这个类就是单独的,没有实现接口,就不能使用aop了吗
额,目前看来是的。
AOP的简单实现6和9组成的最大数字
Loading...