既存のオブジェクト スプリングを管理するにはどうすればよいですか? Springs AoP
を使用して機能に接続したいと思いaspectj
ます。Spring AoP
おそらくオブジェクトとともに作成される動的プロキシを使用するため、これが課題であることはわかっています。
なぜこれが必要なのですか?
runtimeでのみ知られているコンストラクター引数を取るサードパーティのクラスがあるため、それを自分に追加したり、構築にスプリングインターフェイスを使用したりできないようです。他に方法はありますか?applicationContext
FactoryBean
私はすでに次のことを試しましたが、大きな成功はありませんでした:
Obj obj = new ThirdPartyObj("runtime constructor arg");
appContext.getAutowireCapableBeanFactory().initializeBean(obj, "Obj");
春に管理されている可能性がありますが、アスペクトをトリガーするために使用することはまだできません。
[編集] axtavtが指摘した問題は、 から返されたオブジェクトを使用していないことinitializeBean(..)
です。上記のアプローチは両方とも機能しますが、次の場合にのみ機能します。
インターフェイスを使用する
ObjInterface obj = (ObjInterface) ac.getBean("obj", args);
か、次を取得します。java.lang.ClassCastException: $Proxy28 cannot be cast to com.company.Obj
インターフェイスを使用せず、有効にし
CGLIB
ます。これには、プライベートではないデフォルトのコンストラクターが必要です。そうしないと、次のようになります。java.lang.IllegalArgumentException: Superclass has no null constructors but no arguments were given