首先我尝试xml配置:
<aop:aspect>
<aop:declare-parents types-matching="DBOperations.ILearningData+"
implement-interface="DBOperations.ISaveResults"
delegate-ref="saverExtension"/>
</aop:aspect>
它运作良好。
现在我尝试制作aspectj,我应该这样做:
public aspect ASaveResults {
public ASaveResults() { }
declare parents : TSaveResults implements ILearningData;
}
其中TSaveResults与bean&#34; saverExtension&#34;相同。
我运行我的代码:
...
@Value("#{learningData}")
protected ILearningData saver;
...
((ISaveResults)saver).saveResults();
并收到错误:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: sun.proxy.$Proxy12 cannot be cast to DBOperations.ISaveResults
我的方面有什么问题?
我也试过这段代码不成功:
public aspect ASaveResults {
public ASaveResults() { }
declare parents : ISaveResults implements ILearningData;
public void saveResults() {
System.out.println("saver aspect");
}
}
答案 0 :(得分:2)
你在那里使用的是核心aspectj,所以如果你想使用Spring AOP,而不是xml config,那么这就是你应该做的(未经测试):
@Aspect
public class ASaveResults {
@DeclareParents(value="ISaveResults")
public static ILearningData interf;
public void saveResults() {
System.out.println("saver aspect");
}
}
答案 1 :(得分:1)
public aspect ASaveResults {
public ASaveResults() { }
declare parents : LearningData extends TSaveResults;
}
其中LearningData和TSaveResults - 类。所以现在TSaveResults扩展了LearningData - 这是我的目标