aspectj-autoproxyのきめ細かい制御は春に可能ですか?
質問
<!> lt; aop:aspectj-autoproxy proxy-target-class = <!> quot; false <!> quot; / <!> gt;私の春のコンテキストの開始まで、インターフェースを実装するすべてのBeanはJDKプロキシを取得します。 A)プロキシを実際に必要とするクラス、またはB)プロキシを必要と指定するクラスにプロキシすることを制限したいと思います。
プロキシを必要とするBeanのxml Bean定義内でaop:scoped-proxyスタンザを使用しようとしましたが、aop-adviceを提供していないようです。
<!> lt; aop:aspectj-autoproxy .... <!> gt;の追加も試みました。私の春のxmlファイルの終わり近くにありますが、プロキシを必要とするすべてのBeanを追加する前ですが、正常に動作していないようです。
インターフェイスを持つBeanのたくさんがありますが、AoPアドバイスは(明確に定義された)ほんの一握りしか必要とせず、それらのプロキシはスタックトレースを大きく混乱させています。 (私は春3.0を覗き見し、そこで可能になると思うが、しばらく離れているようだ)。
これは2.5.Xで可能ですか?
解決
AbstractAdvisorAutoProxyCreator.javaの行67(春2.5.6)に見られるように、自動プロキシ作成者は実際に私が求めていることだけを行います。必要以上に自動プロキシを行いません。
使用するポイントカット式の種類が、このクラスのプロキシ処理の程度に大きく影響することがわかりました。私が使用していた注釈は
でした@Around(value="@target(myannotation)")
これは基本的に、Springが実際の呼び出しターゲットのタイプに基づいてインターセプトすることを決定するプロキシを生成することを意味します。この欠点は、Springがapplicationcontextで利用可能な all Beanでこれを実行しようとすることです。私が代わりに@withinのようなものを使用していた場合、Springはインターフェイスを使用して自動プロキシを実行するかどうかを決定し、これはアプリケーションコンテキストの構築時に静的に決定できます。
つまり、プロキシされたクラスは2つしかありません;)