Spring MVC 应用程序中包含 AspectJ 切入点的第三方 JAR

Third party JAR containing AspectJ pointcut in Spring MVC application

我有一个外部 jar 文件,里面只有一个 AspectJ class。

@Aspect
public class SecurityAspect {

   @Pointcut("execution(* *(..)) && @annotation(external.package.Secure)")
 public void doCheck() {}

   @Before("doCheck()")
 public void applyCheck(JoinPoint joinPoint) {
       //sth...
   }

}

我想在 Spring MVC 控制器

中使用 @Secure 注释触发该方面
@Secure
@RequestMapping(value = "/test", method = RequestMethod.GET)
public void test() {
  System.out.println("test");
}

aspects-config.xml 具备考虑我项目方面的所有必要条件。

    <aop:aspectj-autoproxy>
     <aop:include name="log" /> (non external)
     <aop:include name="sec" />
    </aop:aspectj-autoproxy>

    <bean id="log"
    class="internal.package.LogAspect"
    factory-method="aspectOf" />

    <bean id="sec"
    class="external.package.SecurityAspect"
    factory-method="aspectOf" />

Eclipse 识别出绑定到 test() 的东西,但是当我启动服务器时,Spring 找不到 class external.package.SecurityAspect

Caused by: java.lang.ClassNotFoundException: external.package.SecurityAspect

在我的应用程序中,我已经有一个非外部方面,它为实用程序创建日志并将安全方面移到项目包中工作正常。

我遇到的最全面的(对我来说)问题:

this(1) 但我不确定这是否完全正确,因为 Eclipse 确实在外部 Jar 中也认识到了这一点……但也许是我的误解;

this(2)有道理!我从 Maven 中删除了我的外部库,删除了该接口导入的 application-context.xml(对吗?)上的任何指针,启动和... Error creating bean with name 'log' defined in file [path/to/aspects-config.xml]: No matching factory method found: factory method 'aspectOf()'. Check that a method with the specified name exists and that it is static.(为什么抱怨 log 方面?)

谈论 <context:load-time-weaver /> 但是一旦添加到我的应用程序上下文 xml.

似乎就不起作用了

只有当我使用不在同一个包中的 EXTERNAL JAR 时才会出现此问题。

有人可以更好地阐明它实际上是不可能的(this(3))还是可能使外部方面作为第三方库导入到项目中?

米。 Deinum 在下面的评论中注意到 factory-method="aspectOf" 对于非 aspect 类型没有必要使用(然后对于我所有的 @Aspect 它不是)。

删除了那个,启动,没有例外,现在我有一个工作方面。