4

私はSpringAOPが初めてです。イントロダクションの簡単な例を書きたいのですが、どのように動作する必要があるのか​​ 明確に理解できません。

ドキュメントでは、次のことがわかりました。

はじめに: 型に代わって追加のメソッドまたはフィールドを宣言します。Spring AOP を使用すると、アドバイスされたオブジェクトに新しいインターフェース (および対応する実装) を導入できます。たとえば、イントロダクションを使用して Bean に IsModified インターフェースを実装させ、キャッシングを簡素化できます。(イントロダクションは、AspectJ コミュニティでは型間宣言として知られています。)

そして、簡単な例を書きます: 1つのメソッドで簡単なクラスを書きます

public class Test {
    public void test1(){
        System.out.println("Test1");
    }
}

次に、このインターフェースを実装するインターフェースとクラスを作成します

public interface ITest2 {
    void test2();
}

public class Test2Impl implements ITest2{
    @Override
    public void test2() {
        System.out.println("Test2");
    }
}

そして最後に私の側面

@Aspect
public class AspectClass {

    @DeclareParents(
            value = "by.bulgak.test.Test+",
            defaultImpl = Test2Impl.class
    )
    public static ITest2 test2;
}

私の春の設定ファイルは次のようになります:

<aop:aspectj-autoproxy/>
<bean id="aspect" class="by.bulgak.aspect.AspectClass" />

だから私の質問:どうすれば今これをできますか。海の結果を得るためにメインクラスに何を書く必要がありますか? 他のクラスを書く必要があるかもしれません.(SpringAOPについて読んだ本では完全な例が見つかりません)

アップデート

私の主な方法は次のようになります。

public static void main(String[] args) {
    ApplicationContext appContext = new ClassPathXmlApplicationContext("spring-configuration.xml");
    Test test = (Test) appContext.getBean("test");
    test.test1();
    ITest2 test2 = (ITest2) appContext.getBean("test");
    test2.test2();

}

アプリを実行すると、次のエラーが発生します。

Exception in thread "main" java.lang.ClassCastException: com.sun.proxy.$Proxy5 cannot be cast to by.bulgak.test.Test

この行で:

Test test = (Test) appContext.getBean("test");
4

1 に答える 1