Spring AOP 是什么
AOP(面向切面编程)是一种对一类问题集中处理的思想,比如拦截器、统一返回结果管理、统一异常处理、登录校验等。如果使用 OOP(面向对象编程),相同的代码容易重复出现,业务方法中混杂着非核心逻辑。
Spring AOP 就是为了解决这些问题而存在的,它是 AOP 思想的一种具体实现方式。
核心优势
- 不影响原有代码,实现解耦
- 便于维护功能模块
- 提高开发效率
- 减少重复代码
快速上手:计算方法耗时
我们先写一个使用 Spring AOP 计算所有方法运行时的例子。
- 引入依赖 在 pom.xml 中添加以下依赖。注意 SpringBoot 版本号为 4.x.x 时,AOP 依赖需要显式指定版本号。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
- 编写切面类 创建一个 Aspect 类来记录方法执行时间。
package com.example.springbookdemo.aspect;
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
@Aspect
@Component
public class TimeRecordAspect {
@Around("execution(* com.example.springbookdemo.controller.*.*(..))")
public Object timeRecord(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
// proceed() 方法返回类型固定为 Object
joinPoint.proceed();
System.currentTimeMillis();
log.info(joinPoint.getSignature() + + (end - start) + );
proceed;
}
}






