2012-04-11 5 views
2

私はかなり奇妙な状況があります。私はSpring 3.0.6を使用しています。これまでのところ、かなり普通のもの。私のbeanにはいくつかの保護されたメソッドもあります。私はいくつかのAOP(JDKプロキシ)を使用しており、すべて正常に動作します。保護されたメソッドを持つSpringにJDK Proxiedクラスを挿入するには?

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

私は保護されたメソッドにアクセスする必要があるので、私はインターフェイスのメソッドを宣言することができないので、私は多少キャッチ22の状況にあります。私はCGLIBプロキシに切り替えようとしましたが、最終的な方法でBeanにアドバイスする他のアドバイザーと衝突するなど)、実際は解決策ではありません。

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

何か提案がありがとうございます。

ありがとうございます!

エリック

答えて

1

私は考えることができるソリューションは、プロキシオブジェクトから実装を取得することです。

http://www.techper.net/2009/06/05/how-to-acess-target-object-behind-a-spring-proxy/上記リンクに与えられるよう

"((アドバイザリー)プロキシ).getTargetSource()でgetTarget()" を返すプロキシオブジェクトあちこち実装を標的とします。今度は、このターゲットオブジェクトをImplクラス&にキャストし、そのimplクラスで保護されたメソッドを呼び出すことができます。

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

+0

ブリリアント。ありがとう!残念ながら、私は6ヶ月前にこれについて知りませんでしたので、私は状況を回避するために自分の道を歩いてしまいました。(これはどういうわけか覚えていませんが)これは次回に知るべき素晴らしい情報です! –

関連する問題