5

ここに質問があります: 私は method を持っていますdigest(byte[] data)。クラスの外では本当に必要ないので、プライベートにする必要がありますが、それが役立つ場合は、パブリックにしても死ぬことはありません。
問題は、どうにかしてインターセプターを接続できますか? 問題は、 のように呼び出されるのではなく、記号が smth のようにgetBean('MyBean').digest()呼び出されることです。getBean('MyBean').sign(data)

public byte[] sign(byte[] data){
   ...
   b = digest(data);
   ...
   return signature;
}

どうも。

4

4 に答える 4

3

メソッドがパブリックであっても、Springは、メソッドを含むオブジェクト内から行われたメソッド呼び出しをインターセプトできません。これを実現するには、AspectJを使用する必要があります。

于 2010-09-02T12:42:05.097 に答える
1

完全な AspectJ ブードゥー教のようなものです。インターセプトされたメソッドを作成する必要がありますpublicdigest()Beanのメソッドを として公開したくないpublicが、インターセプターを適用したい場合は、コードをリファクタリングして、新しいダイジェスト インターフェイスを実装する別のクラスにダイジェスト ロジックを抽出し、インターセプターを適用することをお勧めします。それ。

少し不器用ですが、懸念事項を分離する必要がありますが、これは悪いことではありません。

于 2010-09-02T12:54:28.907 に答える
0

目的を達成する別の方法は、Digester クラスを作成し、その digest() メソッドへの呼び出しをインターセプトすることです。

public interface Digester {
  public Foo digest(byte[] data);
}

class DigesterImpl implements Digester {
  public Foo digest(byte[] data) {...}
}

次に、Spring コードで、プロキシされた DigesterImpl をクラスに注入して呼び出します。

private final Digester digester;

MyClass(Digester digester) {
  this.digester = digester;
}

public byte[] sign(byte[] data){
   ...
   b = digester.digest(data);
   ...
   return signature;
}
于 2010-09-04T09:04:07.090 に答える