28

私はSpringを使って豆を注入しています。そして、Bean メソッドに注釈を付けるためにいくつかの注釈を使用しています (Security、TransactionManagement、ExceptionHanling、Logging)。問題は:

一部のメソッドに注釈を付け忘れていないかどうかを確認する JUnit テストを作成したいと考えています。しかし、Spring はメソッドに注釈を付けずに $ProxyXXX クラスを返します。

Method[] methods = logic.getClass().getMethods();

  for (Method method : methods) {
     Annotation[] annotations = method.getAnnotations();   // empty array!

メソッドの注釈を取得したり、実際のクラス オブジェクトを取得するにはどうすればよいですか?

PS Spring 2.5.6、JDKDynamicProxy (CGLib ではない)

4

4 に答える 4

32

Springのインターフェースベースのプロキシはを実装しTargetClassAwareます。

于 2010-02-18T14:42:47.080 に答える
22

または、次のように呼び出すこともできます。AopUtils.getTargetClass(java.lang.Object)staticメソッド呼び出しです。

于 2015-07-23T19:06:37.930 に答える
21

プロキシされたオブジェクトをキャストして、プロキシとして機能するオブジェクトとクラスを取得できます(TargetSourceを参照)。

Advised advised = (Advised) proxy;
Class<?> cls = advised.getTargetSource().getTargetClass();

一般に、Springの原則に従い、できるだけ目立たないように正しいクラスを取得し続ける必要があります。つまり、可能な限り少ないクラスがSpring Framework APIに依存する必要があります(おそらく、ClassLocatorとSpringProxyClassLocatorの実装を追加します)。

于 2010-02-18T14:41:49.100 に答える