0

Spring AOP について困っています。アスペクトを使用してメソッドをトリガーしようとしていますが、アスペクトをトリガーするメソッドも同じクラスのメソッドであり、アスペクトが機能していません(ちなみにエラーはありません)。このように

class A extends Runnable{
  public void write(){
      System.out.println('Hi');
  }

   public void run(){
       this.write();
   }

}

<aop:after-returning  method="anyMethod" pointcut="execution(* A.write(..))"/>

どんなアイデアでも大歓迎です

ありがとう

4

3 に答える 3

1

アドバイスされたメソッドが別のスレッドで呼び出されるという事実は、何の違いもありません。スレッドに渡すインスタンスが、アプリケーション コードではなく、Spring アプリケーション コンテキストによって作成されていることを確認してください。

また、インターフェースではなくクラスで宣言されたメソッドをアドバイスしているwrite()ため、ロード時のウィービングを実行する必要があります(クラスパスに cglib が必要です)。

于 2012-01-06T09:46:17.837 に答える
0

これは、Spring AOP がプロキシ ベースであるためです。プロキシを使用して、基になるオブジェクトへの呼び出しを委任します。ただし、基になるオブジェクトのメソッドがその内部の同じクラス (ユースケース) の別のメソッドを呼び出すと、プロキシが表示されないため、達成しようとしていることが不可能になります。いくつかの回避策がありますが、それらは AOP の目的そのものを殺してしまいます。

詳細については、こちらを参照してください。

http://docs.spring.io/spring/docs/3.1.x/spring-framework-reference/html/aop.html#aop-understanding-aop-proxies

于 2015-06-22T10:43:12.243 に答える