声明父母aspectj

时间:2013-06-04 18:46:54

标签: spring aspectj

首先我尝试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");
}

}

2 个答案:

答案 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 - 这是我的目标