是否有可能创建一个方面,该方面会自动应用于客户端项目中的类?

问题描述 投票:6回答:2

我想拥有一个JAR,其方面可以拦截所有方法调用,例如

@Aspect
public class CoolAspect {
    @Pointcut("execution(public * *(..))")
    public void anyPublicMethod() { }

    @Before("anyPublicMethod()")
    public void advice(JoinPoint point) {
       System.out.println("sign:\t" + point.getSignature());
    }
}

假设以上是我拥有的并希望客户端使用的方面。我将其编译为JAR并提供给Maven。

现在,客户端将使用此jar作为依赖项,例如

    <dependency>
        <groupId>cool-group</groupId>
        <artifactId>cool-artifact</artifactId>
        <version>1.0.0</version>
    </dependency>

此工件(JAR)具有上述方面。

现在可以进行方面工作只需声明一个Maven依赖项>>]

可能不重要的几件事:

  1. 我计划使用AspectJ(如果需要,也许使用Spring AOP,],
  2. 客户端可能是具有正常web.xml等的Web应用程序。>>
  3. 使用Maven构建客户端
  4. 我希望客户端尽可能地易于配置-在我最初的想法中,Maven依赖就足够了。
  5. “ Annotation JAR”将包含一个Web片段,因此可以在其中声明一些自定义ServletContextListener
  6. 有什么想法吗?

我想要一个JAR的某个方面可以拦截所有方法调用,例如@Aspect公共类CoolAspect {@Pointcut(“ execution(public * *(..))”)public void anyPublicMethod(){} @ ...

java servlets aspectj spring-aop aspect
2个回答
2
投票

否,这是不可能的

,因为AspectJ必须在任何客户端类之前启动。所有客户端类都应通过特殊的增强类加载器加载,该加载器将处理注释。

0
投票

如果使用spring-boot,请找到此问题的简单解决方案:

© www.soinside.com 2019 - 2024. All rights reserved.