【问题标题】:Pointcut to extended class methods with Aspectj使用 Aspectj 指向扩展类方法的切入点
【发布时间】:2020-07-01 13:02:03
【问题描述】:

我在 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()
    }
}

现在,我想通过TestControllerAbstractTestContoller 上的所有方法执行创建一个切入点。我该怎么做?

我试过了:

"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+)"

这些都不起作用

【问题讨论】:

  • 您的项目结构如何?请确认Aspect是否被组件扫描自动检测到

标签: spring-boot kotlin aop aspectj spring-aop


【解决方案1】:

方面J

如果您不同时执行以下操作之一,则将 AspectJ 编织器添加到您的 Maven 项目的效果为零:

  • 添加 AspectJ Maven 插件,以便真正让 AspectJ 编译器将您的切面编入目标类或
  • 使用 AspectJ 编织代理运行 Java,例如 -javaagent:/my/path/aspectjweaver.jar

Spring AOP

第二种可能性:您并没有真正使用 AspectJ,就像您可能相信的那样,只是一个名为 Spring AOP 的“AOP lite”框架,它以完全不同的方式配置。因此,除非您在更新的问题或 GitHub 项目中提供完整的 MCVE,否则没有人能够准确地告诉您您做错了什么。

无论你使用 AspectJ 还是 Spring AOP,在这两种情况下,我都建议你先阅读一些文档。

更新:您的 Spring AOP 的 @Aspect 应该是 @Component,而不是 @Configuration。请把后者放到一个单独的类中,实际上也在那里配置一些东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 2019-12-31
    • 2014-11-17
    • 1970-01-01
    相关资源
    最近更新 更多