1

まず、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「saverExtension」と同じです。

私は自分のコードを実行します:

    ...
@Value("#{learningData}")
protected ILearningData saver;
    ...
    ((ISaveResults)saver).saveResults();

そしてエラーを取得します:

スレッド「AWT-EventQueue-0」の例外 java.lang.ClassCastException: sun.proxy.$Proxy12 は DBOperations.ISaveResults にキャストできません

私のアスペクトの問題は何ですか?

また、このコードを試してみましたが失敗しました:

public aspect ASaveResults {

    public ASaveResults() { }
    
    declare parents : ISaveResults implements ILearningData;
    
    public void saveResults() {
        System.out.println("saver aspect");
    }

}
4

2 に答える 2

2

そこで使用したのはコアアスペクトjであるため、Spring AOPを使用したいがxml構成を使用したくない場合は、次のことを行う必要があります(テストされていません):

@Aspect
public class ASaveResults {

   @DeclareParents(value="ISaveResults")
   public static ILearningData interf;

   public void saveResults() {
      System.out.println("saver aspect");
   }
}
于 2013-06-04T19:30:26.353 に答える
1
public aspect ASaveResults {    

public ASaveResults() { }

declare parents : LearningData extends TSaveResults;

}

LearningData と TSaveResults - クラス。だから今、TSaveResults は LearningData を拡張します - これが私の目標でした

于 2013-06-04T19:39:03.827 に答える