文章目录
一、什么是Spring的AOP?
AOP(面向切面编程,Aspect-Oriented Programming)
是一种编程范式,它允许程序员将跨越多个模块的关注点(如日志记录、事务管理、权限控制等)从业务逻辑中分离出来,以提高代码的可重用性和模块化。Spring AOP 是 Spring Framework 提供的一种实现 AOP 的方式,通过动态代理在运行时拦截方法调用,执行横切关注点的逻辑。
核心概念:
切面(Aspect)
: 横切关注点的模块化表示,比如日志功能、事务管理。切面可以在多个应用模块中重用。连接点(Join Point)
: 程序执行中的某个特定点,比如方法调用或异常抛出。在 Spring AOP 中,连接点通常指方法的执行。通知(Advice)
: 在切面的特定位置执行的代码,比如方法执行前后。Spring 提供了多种通知类型,包括前置通知、后置通知、环绕通知等。切入点(Pointcut)
: 切入点定义了通知应用的具体连接点。切入点表达式用于匹配应用程序中需要增强的特定方法。引入(Introduction)
: 允许我们向现有的类中添加新方法或属性。目标对象(Target Object)
: 被通知的对象,即包含了横切关注点的对象。代理(Proxy)
: AOP 框架为目标对象创建的动态代理,通知通过代理在目标对象上应用。
二、实现一个自定义注解的日志功能 Starter
需求描述
我们需要创建一个 Spring Boot Starter,提供一个自定义注解 @LogExecution。这个注解可以应用在方法上,自动记录方法的全限定名、方法的参数以及方法的执行时间。目标是将日志记录功能封装在 Starter 中,以便在其他 Spring 项目中轻松复用。
实现步骤
1. 创建Spring Boot Starter项目
首先,创建一个新的 Maven 项目,并配置所需的依赖。
Maven pom.xml
:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
&