Spring In Action一书有以下例子。它使用AspectJ的方面来说明构造函数切入点。
示例:
package com.ct.springidol;
public aspect JudgeAspect {
public JudgeAspect() {
}
private CriticismEngine criticismEngine;
//Constructor injection is supposed to happen
public void setCriticismEngine(CriticismEngine criticismEngine) {
this.criticismEngine = criticismEngine;
}
pointcut performance(): execution( * perform(..));
after() returning(): performance() {
System.out.println(criticismEngine.getCriticism());
}
}
package com.ct.springidol;
public class CriticismEngineImpl implements CriticismEngine {
//CriticismEngine - an interface - has only getCriticism() method.
public CriticismEngineImpl() {
}
private String[] criticismsPool;
//injected using xml file
public void setCriticismsPool(String[] criticismsPool) {
this.criticismsPool = criticismsPool;
}
public String getCriticism() {
int i = (int) (Math.random() * criticismsPool.length);
return criticismsPool[i];
}
}
相应的XML:
<bean id="criticismEngine"
class="com.ct.springidol.CriticismEngineImpl">
<property name="criticismsPool">
<list>
<value>I'm not being rude, but that was appalling.</value>
<value>You may be the least talented person in this show.</value>
<value>Do everyone a favor and keep your day job.</value>
</list>
</property>
</bean>
<bean class="com.ct.springidol.JudgeAspect" factory-method="aspectOf">
<property name="criticismEngine" ref="criticismEngine"/>
</bean>
但是当我运行程序,即运行perform()
方法时,我得到以下异常。怎么解决这个?仅供参考,我的maven依赖项中包含aspectjrt
和aspectjweaver
。
例外:
Exception in thread "main"
org.springframework.beans.factory.CannotLoadBeanClassException:
Cannot find class [com.ct.springidol.JudgeAspect] for bean with name
'com.ct.springidol.JudgeAspect#0' defined in class path resource
[spring-idol.xml]; nested exception is
java.lang.ClassNotFoundException: com.ct.springidol.JudgeAspect
答案 0 :(得分:0)
JudgeAspect
的代码段中的包声明似乎缺失了。你需要它来切入你的切入点。你忘记把它贴在这里吗?看起来好像Spring找不到自己的bean。这看起来像是类路径配置问题,而不是AspectJ或Spring AOP问题。我不是Spring用户,但这就是我的样子。
这是你的第一个Spring计划吗?你有没有设法让一个最小的Spring项目运行?
答案 1 :(得分:0)
我正在使用IntelliJ。我必须配置IDE才能编译方面,即JudgeAspect
。为了使该程序正常工作,它需要编译方面。因此,必须在IDE的编译器设置中启用AspectJ compiler
即ajc compiler
而不是Java编译器。
有关完整的详细信息
http://www.jetbrains.com/idea/webhelp/using-the-aspectj-%28ajc%29-compiler.html