我有一个外部jar文件,该文件仅在一个AspectJ类中。
@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无法找到类external.package.SecurityAspect
Caused by: java.lang.ClassNotFoundException: external.package.SecurityAspect
在我的应用程序中,我已经有一个非外部的Aspect,可以记录实用程序,并将Security Aspect移入Project的程序包中可以正常工作。
我遇到的最全面的(对我来说)问题:
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.
方面?)< / p>
this(3)在谈论log
,但是一旦添加到我的应用程序上下文xml中似乎就不起作用了。
仅当我在同一软件包中使用EXTERNAL JAR时,此问题才会出现。
有人可以更好地说明实际上是否不可能(this(3))或可以使外部Aspect作为第三方库导入项目吗?
答案 0 :(得分:0)
M。 Deinum在下面的评论中注意到,对于非factory-method="aspectOf"
类型,无需使用aspect
(对于我的所有@Aspect
则不需要)。
删除该内容,启动,没有例外,现在我可以正常工作了。