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
它不是)。
删除了那个,启动,没有例外,现在我有一个工作方面。
我有一个外部 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
它不是)。
删除了那个,启动,没有例外,现在我有一个工作方面。