2

私にはかなり奇妙な状況があります。私はSpring 3.0.6を実装してインターフェースするBeanで使用しています。これまでのところ、かなり普通のことです。私の Bean には、いくつかの保護されたメソッドもあります。私はいくつかの AOP (JDK プロキシ) を使用していますが、すべて正常に動作します。

この Bean を別のパッケージ クラスに注入したいときに問題が発生します。通常の状況では、実装を挿入して、保護されたメソッドにアクセスできます。残念ながら、これは JDK プロキシであるため、インターフェイスに基づいて注入することしかできません。

保護されたメソッドにアクセスする必要があるため、インターフェイスでメソッドを宣言できないため、キャッチ 22 の状況に陥っています。私は CGLIB プロキシに切り替えようとしましたが、ファイナル メソッドなどで Bean をアドバイスする他のアドバイザーでクラッシュするため、実際には解決策ではありません。

私に何ができるかについて何か提案はありますか?@PostConstruct メソッドを使用してアプリケーション コンテキストから Bean を取得しようとしましたが、(当然のことながら) Proxied Bean しか取得できず、必要な実装にキャストできません。

任意の提案をいただければ幸いです。

ありがとう!

エリック

4

1 に答える 1

1

私が考えることができる解決策は、プロキシ オブジェクトから実装を取得することです。

http://www.techper.net/2009/06/05/how-to-acess-target-object-behind-a-spring-proxy/

上記のリンクにあるように、「((Advised)proxy).getTargetSource().getTarget()」は、プロキシ オブジェクトからターゲットの実装を返します。これで、このターゲット オブジェクトを Impl クラスにキャストし、その impl クラスで保護されたメソッドを呼び出すことができます。

これが機能するかどうかを確認してください。

于 2012-10-23T09:35:09.307 に答える