SpringBoot 中定义切面:详细步骤及示例
在 Spring Boot 中定义一个切面可以分为以下几个步骤:
- 引入 AOP 依赖
在 pom.xml 文件中引入 spring-boot-starter-aop 依赖,例如:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
- 创建切面类
创建一个类,并使用 @Aspect 注解标注,例如:
@Aspect
@Component
public class LogAspect {
@Pointcut('execution(* com.example.demo.controller.*.*(..))')
public void pointcut() {}
@Before('pointcut()')
public void before(JoinPoint joinPoint) {
// 前置通知
}
@AfterReturning('pointcut()')
public void afterReturning(JoinPoint joinPoint) {
// 后置通知
}
@AfterThrowing('pointcut()')
public void afterThrowing(JoinPoint joinPoint) {
// 异常通知
}
@After('pointcut()')
public void after(JoinPoint joinPoint) {
// 最终通知
}
}
- 定义切点
使用 @Pointcut 注解定义切点,例如:
@Pointcut('execution(* com.example.demo.controller.*.*(..))')
public void pointcut() {}
这里定义了一个切点,表示匹配 com.example.demo.controller 包下的所有方法。
- 定义通知
使用 @Before、@After、@AfterReturning、@AfterThrowing 注解定义通知,例如:
@Before('pointcut()')
public void before(JoinPoint joinPoint) {
// 前置通知
}
这里定义了一个前置通知,在切点匹配的方法执行前执行。
- 配置切面
在配置类中使用 @EnableAspectJAutoProxy 注解启用 AOP,并将切面类加入到 Spring 容器中,例如:
@Configuration
@EnableAspectJAutoProxy
public class AppConfig {
@Bean
public LogAspect logAspect() {
return new LogAspect();
}
}
这里定义了一个配置类,并将 LogAspect 类加入到 Spring 容器中,并使用 @EnableAspectJAutoProxy 注解启用 AOP。
- 测试切面
可以在匹配的方法上加入一些日志打印语句,例如:
@RestController
public class DemoController {
@GetMapping('/demo')
public String demo() {
System.out.println('执行 demo 方法');
return 'hello world';
}
}
然后访问 http://localhost:8080/demo,可以在控制台看到日志打印出来。
原文地址: https://www.cveoy.top/t/topic/oKTy 著作权归作者所有。请勿转载和采集!