AOP基础
2026年2月5日大约 2 分钟
AOP基础
AOP 即面向切面编程(Aspect-Oriented Programming),是一种编程范式,旨在通过将横切关注点(如日志记录、安全性、事务管理等)从核心业务逻辑中分离出来,提高代码的模块化和可维护性。AOP 允许开发者在不修改现有代码的情况下,动态地向程序中添加功能。
简单来说,AOP就是面向特定方法编程
Spring AOP快速入门
下面将展示一个简单的Spring AOP示例,演示如何使用AOP来记录方法的执行时间。
1. 添加依赖
确保Spring项目中包含了AOP相关的依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>2. 创建业务类
@Service
public class UserService {
public void createUser(String name) {
// 模拟创建用户的业务逻辑
System.out.println("Creating user: " + name);
}
}3. 创建切面类(核心)
@Aspect
@Component
public class TimeAspect {
@Around("execution(* com.example.demo.service.UserService.*(..))")
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
Object result = joinPoint.proceed(); // 执行目标方法
long executionTime = System.currentTimeMillis() - start;
System.out.println(joinPoint.getSignature() + " executed in " + executionTime + "ms");
return result;
}
}AOP核心概念
可能上面的代码看起来有点复杂,下面我将逐个解析其中的核心概念。
连接点(JoinPoint)
连接点就是可以被AOP控制方法。比如
public void createUser(String name) {
// 模拟创建用户的业务逻辑
System.out.println("Creating user: " + name);
}上面的createUser方法就是一个连接点。
增强/通知(Advice)
增强就是指在连接点上执行的代码逻辑。
在上面的例子中,增强代码为:
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
Object result = joinPoint.proceed(); // 执行目标方法
long executionTime = System.currentTimeMillis() - start;
System.out.println(joinPoint.getSignature() + " executed in " + executionTime + "ms");
return result;
}切入点(PointCut)
切入点是对连接点的进一步筛选,指定哪些连接点需要被增强。
在上面的例子中,切入点表达式为:
@Around("execution(* com.example.demo.service.UserService.*(..))")表示对UserService类中的所有方法进行增强。
连接点和切入点的区别
连接点就是所有可以被增强的方法,而切入点就是指定哪些连接点需要被增强。
切面(Aspect)
描述通知和切入点的对应关系,简单来说,切面就是增强和切入点的结合体。
在上面的例子中,TimeAspect类就是一个切面,包含了增强逻辑和切入点表达式。
目标对象(Target Object)
目标对象就是被AOP代理的对象。
在上面的例子中,UserService类的实例就是目标对象。