Spring AOP 核心概念与实战入门
AOP(Aspect Oriented Programming,面向切面编程)是 Spring 框架的两大核心之一,另一个是 IoC。简单来说,AOP 是一种思想,旨在将那些与业务无关、却为业务模块所共同调用的逻辑(如事务管理、日志记录、性能监控等)封装起来,减少系统的重复代码,降低模块间的耦合度。
为什么需要 AOP?
在实际开发中,我们往往面临这样的场景:项目中有大量业务功能,某些接口执行效率较低,需要优化。第一步通常是定位耗时较长的方法,而统计每个方法的运行时间是一个典型需求。
如果不使用 AOP,我们需要在每个业务方法的前后手动添加记录开始和结束时间的代码。随着业务模块增多,这种重复工作会显著增加维护成本。AOP 的优势在于,它允许我们在不修改源代码的前提下,针对特定方法进行功能增强。这种非侵入式的解耦方式,正是 AOP 的核心价值所在。
实战:引入依赖与编写程序
1. 引入 AOP 依赖
在 pom.xml 中添加 Spring Boot 的 AOP 启动器依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2. 编写切面类 (Aspect)
接下来定义一个切面类,用于拦截目标方法并记录耗时。这里使用 @Around 环绕通知,它可以包裹目标方法的执行过程。
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Slf4j
@Component
@Aspect
public class AspectTest {
/**
* 记录方法耗时
*/
@Around("execution(* com.wmh.springaop.controller.*.*(..))")
public Object recordTime(ProceedingJoinPoint pjp) throws Throwable {
// 记录方法执行开始时间
long System.currentTimeMillis();
pjp.proceed();
System.currentTimeMillis();
log.info(pjp.getSignature() + , end - begin);
result;
}
}



