在 Spring Boot 中定义一个切面可以分为以下几个步骤:

  1. 引入 AOP 依赖

pom.xml 文件中引入 spring-boot-starter-aop 依赖,例如:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
  1. 创建切面类

创建一个类,并使用 @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) {
        // 最终通知
    }
    
}
  1. 定义切点

使用 @Pointcut 注解定义切点,例如:

@Pointcut('execution(* com.example.demo.controller.*.*(..))')
public void pointcut() {}

这里定义了一个切点,表示匹配 com.example.demo.controller 包下的所有方法。

  1. 定义通知

使用 @Before@After@AfterReturning@AfterThrowing 注解定义通知,例如:

@Before('pointcut()')
public void before(JoinPoint joinPoint) {
    // 前置通知
}

这里定义了一个前置通知,在切点匹配的方法执行前执行。

  1. 配置切面

在配置类中使用 @EnableAspectJAutoProxy 注解启用 AOP,并将切面类加入到 Spring 容器中,例如:

@Configuration
@EnableAspectJAutoProxy
public class AppConfig {
    
    @Bean
    public LogAspect logAspect() {
        return new LogAspect();
    }
    
}

这里定义了一个配置类,并将 LogAspect 类加入到 Spring 容器中,并使用 @EnableAspectJAutoProxy 注解启用 AOP。

  1. 测试切面

可以在匹配的方法上加入一些日志打印语句,例如:

@RestController
public class DemoController {
    
    @GetMapping('/demo')
    public String demo() {
        System.out.println('执行 demo 方法');
        return 'hello world';
    }
    
}

然后访问 http://localhost:8080/demo,可以在控制台看到日志打印出来。

SpringBoot 中定义切面:详细步骤及示例

原文地址: https://www.cveoy.top/t/topic/oKTy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录