AOP(Aspect-Oriented Programming,面向切面编程)是一个编程范式,通常用于在不修改业务代码的情况下,通过横切关注点(如日志、事务管理等)来增强目标对象的行为。为了实现这种增强,Spring 使用 代理模式,即通过代理对象来控制对目标对象的访问。

使用AOP来帮助我们在方法执行前或执行之后,做一些额外的操作。在保证原有业务不变的情况下添加额外的动作,如方法执行完后打印日志等等。

代理类型

在 Spring AOP 中,有两种常见的代理方式:

  • JDK 动态代理(接口代理):当目标类实现了接口时,Spring 会使用 JDK 的动态代理机制来创建一个代理对象。这个代理对象实现了目标类的接口,并将方法调用转发到目标对象。
  • CGLIB 动态代理(类代理):如果目标类没有实现接口,Spring 会使用 CGLIB(Code Generation Library)来创建目标类的子类,通过子类来实现代理。这种代理方式不依赖于接口,而是基于类本身的。

AOP 类型

通知(Advice): AOP 框架中的增强处理,通知描述了切面何时执行以及如何执行增强处理,也就是我们上面编写的方法实现。常见的通知类型有:前置通知、后置通知、环绕通知等。

连接点(join point): 连接点表示应用执行过程中能够插入切面的一个点,这个点可以是方法的调用、异常的抛出,实际上就是我们在方法执行前或是执行后需要做的内容。

切点(PointCut): 可以插入增强处理的连接点,可以是方法执行之前也可以方法执行之后,还可以是抛出异常之类的。

切面(Aspect): 切面是通知和切点的结合,我们之前在xml中定义的就是切面,包括很多信息。

引入(Introduction):引入允许我们向现有的类添加新的方法或者属性。

织入(Weaving): 将增强处理添加到目标对象中,并创建一个被增强的对象,我们之前都是在将我们的增强处理添加到目标对象,也就是织入(这名字挺有文艺范的)

XML 方式

接口方式

注解方式

首先在主配置类添加AOP注解支持:

@EnableAspectJAutoProxy
@ComponentScan("org.example.entity")
@Configuration
public class MainConfiguration {
}

然后在需要AOP增强操作的类上添加 @Aspect@Component 注解即可:

@Aspect
@Component
public class StudentAOP {
 
}