【发布时间】:2021-10-14 15:49:34
【问题描述】:
我的切面类在启动时调用切面。
但是在调用下面提到的api之后,模型设置方法不是通过aspect处理的
@RestController
@AllArgsConstructor
@Slf4j
public class MyController {
@PostMapping("/terms")
public Mono<ResponseEntity<ModelResponse>> createCountryExceptionRule(@RequestBody ModelRequest model) {
model.setField1("test");
//some statements
}
}
@Data
class ModelRequest{
String field1;
String field2;
}
@Aspect
@Component
class MyAspect {
@Before("execution(public * *.set*(..))")
public void test(JoinPoint joinPoint) {
System.out.println("Before method:" + joinPoint.getSignature());
}
}
@SpringBootApplication
@EnableAspectJAutoProxy(proxyTargetClass=true)
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
我添加的依赖项如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
如果我通过 http 请求调用 api,则不会调用方面
我在这里做错了什么还是我错过了什么?
【问题讨论】:
-
ModelRequest不是 Spring 托管的 bean,因此 AOP 无法处理它。 -
我已经用 @Component 注释了,还是一样的问题
-
我重新格式化了您的示例代码,按类拆分代码块,添加语法突出显示和统一缩进。也许下次你可以自己做。顺便说一句,你的类没有导入,即除非有人碰巧知道 Lombok
@Data注释,否则她不会理解应该在哪里调用 setter。请为您未来的问题添加更多背景信息。非常感谢。
标签: java spring spring-boot aop spring-aop