我们正在使用AspectJ和Spring支持。我在ApplicationContext.xml中声明了我的方面,如下所示。
<context:annotation-config />
<context:spring-configured />
<context:component-scan base-package="com,com.util">
<context:exclude-filter type="regex" expression="com.xyz*.*" />
</context:component-scan>
<bean id="xyz" class="com.util.XyzAspect" factory-method="aspectOf"/>
Aspect类:
@Configurable
@Aspect
public class XyzAspect {
@Autowired
private XyzUtil xyzUtil;
@After("showPoint() ")
public void logUser( JoinPoint pjp ) throws Throwable {
Sysout("Some log Statement");
}
}
当我从命令提示符执行Maven构建并在Websphere Application Server(7.0)中手动部署EAR时,它工作正常。但是当我从RAD7.5(Rational Application Developer)管理控制台进行部署时,它给出了'找不到匹配的工厂方法:工厂方法'aspectOf''问题。
有人可以完全摆脱这个问题。我也想从RAD运行应用程序。提前谢谢。
答案 0 :(得分:1)
方法aspectOf
由AspectJ编织到您的XyzAspect
中。我相信您使用编译时编织,因此Maven生成的EAR已正确“修补”类XyzAspect
的字节码,因此它部署正常。如果使用IDE组装项目,则该类的字节码缺少某些内容(它是Java源代码的精确表示,是“不完整”)。在编织期间,AspectJ将您的方面“转换”为单例,即添加静态变量以保存唯一的实例和方法(aspectOf
)以获取该唯一实例。请查看this thread以获取更多信息。