V. *_*lev 6 spring aspectj spring-aop spring-boot
我尝试将 AspectJ 添加到我的 Spring Boot 项目之一但失败了。我尝试创建非常简单的 Spring Boot 项目,但它也不起作用。我添加了 @EnableAspectJAutoProxy 注释等,但仍然相同。我究竟做错了什么?
这是这个简单项目的代码:
@SpringBootApplication
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@Aspect
@Component
public class MessageAspect {
@Before("execution(* com.example.demo.MessageController.mainMethod())")
public void beforeMethod() {
System.out.println("before method");
}
}
@RestController
public class MessageController {
@RequestMapping(value = "/")
public String mainMethod() {
return "result from mainMethod";
}
}
Run Code Online (Sandbox Code Playgroud)
Maven 依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我认为这些对你有帮助:
Run Code Online (Sandbox Code Playgroud)@Bean MessageAspect messageAspect() { return new MessageAspect(); }
使用@EnableAspectJAutoProxy无(proxyTargetClass = true)
确保您的@Aspect 注释已被扫描。您可以使用 @ComponentScan("myAspectPackageContainer.*")
@Component使用时不再需要注释@Aspect。
"execution( public * com.example.demo...""myPackage.*.*(..)"Run Code Online (Sandbox Code Playgroud)<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.8.7</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.7</version> </dependency>
顺便说一句,@ControllerAdvice如果您只需要关注控制器类,则可以使用
| 归档时间: |
|
| 查看次数: |
8267 次 |
| 最近记录: |