0

@service クラスの実装で Spring の AOPContext.currentProxy() を使用しています。ただし、静的メソッドで使用しており、次のようなことをしています

public static void addCustomer() {
    //....

    ((CustomerService) AopContext.currentProxy()).addCustomer();

    //...

ただし、「プロキシが見つかりません」というエラーが表示されます。expose-proxy を true に設定します。

この種のエラーの理由は、静的メソッドを使用しているためですか?

注: " addCustomer " メソッドも静的です

前もって感謝します。

4

3 に答える 3

3

プロキシ構成は、インスタンスの作成時に挿入されます。このプロキシで作成されたインスタンスを使用して、メソッド AOP を呼び出すと、そのメソッドに適用されるとします。プロキシ インスタンスを使用せずに、またはクラス名 ( static の場合) を使用してメソッドを呼び出しているとします。これは直接呼び出しプロキシ構成がインスタンスに挿入されないため、AOP はそのメソッド呼び出しに適用されません。

于 2012-12-13T11:32:41.953 に答える
1

あなたが何をしようとしているのかはわかりませんが、この方法ではまったくできません。

メソッドの呼び出しはstaticコンパイル時に解決されるため、プロキシベースの AOP の影響を受けません。言い換えると:

  • AopContext.currentProxy()静的メソッドの呼び出しはプロキシされないため、静的メソッド内では意味がありません (インスタンス メソッドの呼び出しを囲むためのプロキシを取得する場合を除きます)。
  • によって返されたインスタンスで静的メソッドを呼び出すAopContext.currentProxy()ことは意味がありません。これは、静的な型の式を使用してコンパイル時に解決されるためです。つまり、 にコンパイルされCustomerService.addCustomer()ます。
于 2012-08-29T15:08:05.997 に答える
0

構成に次のようなものが含まれています<aop:config expose-proxy="true" />か?

于 2012-08-29T15:02:34.430 に答える