3

Bean で Spring-AOP を構成しました。

この Bean にアクセスすると、実際の Bean ではなく、Spring プロキシ クラスが返されます。

実際の豆を手に入れる方法はありますか?

applicationContext.xml

<bean id="abc" class="abc.java" />

some.java

abc a = (abc)applicationContext.getBean("abc")

これはスローします:

java.lang.ClassCastException: $Proxy19

4

2 に答える 2

3

確かに、まずプロキシ オブジェクトにキャストする必要があります。次に試してください:

Proxy.getTargetSource().getTarget

それが機能するかどうかはまったくわかりません.AOPのドキュメントは、プロキシクラスの戻り値の型を説明するときに非常にあいまいです.

于 2009-05-29T13:51:04.013 に答える
2

ターゲット Bean のクラス階層に応じて、Spring はターゲット Bean のクラスを拡張する (CGLIB を使用する) プロキシを生成するか、ターゲット Bean のインターフェースのみを実装するプロキシを生成します。

ターゲット Bean が何らかのインターフェースを実装している場合、後者のオプションが選択されます。これは一般的に好ましいことです。あなたのターゲット クラスは実際に少なくとも 1 つのインターフェイスを実装していると思います。Bean を取得するコードは、クラスではなくインターフェイス タイプへの参照をキャストできますか?

ただし、proxy-target-class オプションを使用して、ターゲット Bean のクラスを拡張するプロキシを Spring AOP に強制的に生成させることができます。正確な構文は、AOP の構成方法によって異なり、質問ではこれを指定しません。

于 2009-06-01T11:15:55.603 に答える