相关疑难解决方法(0)

为什么Spring AOP不会在运行时编织外部jar?

我有一个基于Spring 3的java应用程序构建.这个项目有另一个jar作为依赖.

这个依赖包含一个@org.aspectj.lang.annotation.Aspect类(比如说com.aspectprovider.aspects.MyAspect).有一个@Before建议从实现接口的类编织方法Foo.就像是:

@Before("execution(* com.project.Foo.save(..))")
Run Code Online (Sandbox Code Playgroud)

Foo接口可以是"项目"内或另一罐子.这个例子没关系.

我的项目包含实现的类Foo.当然,那些是我希望它被编织的类.

我的Spring应用程序上下文配置文件(applicationContext.xml)包含以下行:

<aop:aspectj-autoproxy />
Run Code Online (Sandbox Code Playgroud)

我还将方面声明为bean,并注入一些属性:

<bean id="myAspect" class="com.aspectprovider.aspects.MyAspect"
  factory-method="aspectOf" >
  <property name="someproperty" value="somevalue" />
</bean>
Run Code Online (Sandbox Code Playgroud)

通过日志记录,我可以看到MyAspect实例化并注入了属性.但是方法保存没有被截获.这就是问题.

如果我将方面类从jar复制到具有Spring的应用程序,它可以工作.当这些方面包含在外部jar中时,方法save不会被截获.有线索吗?

编辑:我如何调用Foo的保存方法:

//in a JSF managed bean
@Inject
private Foo myFoo;  //there's a implementation of Foo in a package that spring is looking at. So it is injected correctly.

public String someAction() {
    myFoo.save("something"); //the @Before advice is only called if the …
Run Code Online (Sandbox Code Playgroud)

java spring aspectj spring-aop

7
推荐指数
3
解决办法
1万
查看次数

标签 统计

aspectj ×1

java ×1

spring ×1

spring-aop ×1