我在pom.xml 中添加了以下依赖项
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.5</version>
</dependency>
我有一个扩展抽象控制器的控制器
// actual controller
@RestController
@RequestMapping("/testContoller/v1")
class TestController: AbstractTestController()
// abstract class
abstract class AbstractTestController {
@GetMapping("/test")
fun testFunction():String {
return "hello"
}
}
方面类
@Aspect
@Configuration
class TestAspect {
@Around(
"execution(* com.test.project.controllers.TestController.*(..) )"
)
fun testIntercept(joinPoint: ProceedingJoinPoint): Any? {
return joinPoint.proceed()
}
}
现在,我想通过TestController
为AbstractTestContoller
上的所有方法执行创建一个切入点。我该怎么做?
我试过:
"execution(* com.test.project.controllers.TestController.*(..) )"
"execution(* com.test.project.controllers.TestController+.*(..) )"
"execution(* com.test.project.controllers.AbstractTestController.*(..) )"
"execution(* com.test.project.controllers.AbstractTestController+.*(..) )"
"within(com.test.project.controllers.TestController)"
"within(com.test.project.controllers.TestController+)"
"within(com.test.project.controllers.AbstractTestController)"
"within(com.test.project.controllers.AbstractTestController+)"
这些都不起作用
AspectJ
如果您不同时执行以下操作之一,则将AspectJ weaver添加到Maven项目中不会产生任何效果:
- 添加AspectJ Maven插件,以便使AspectJ编译器将您的方面编织到目标类中,或者
- 使用类似
-javaagent:/my/path/aspectjweaver.jar
的AspectJ编织代理运行Java
Spring AOP
第二种可能性:您并没有像您可能认为的那样真正使用AspectJ,而是简单地使用了一个名为Spring AOP的"AOP lite"框架,该框架以完全不同的方式进行配置。因此,除非你在更新的问题或GitHub项目中提供完整的MCVE,否则没有人能够告诉你到底做错了什么。
无论您使用AspectJ还是SpringAOP,在这两种情况下,我都建议您先阅读一些文档。
更新:Spring AOP的@Aspect
应该是@Component
,而不是@Configuration
。请将后者放在一个单独的类中,并在那里配置一些东西。