私は、既存のコードに多くの手動セットアップがあり、main メソッドで実行されるクラスを一緒に配線するプロジェクトに取り組んでいます。これは、Spring が置き換えるのが得意なものの完璧な例のようです。親クラス Widget を共有するオブジェクトがいくつかあります。各ウィジェットには、依存する他のウィジェットのリストが含まれています。
例として、これをコードで書くとしたら、次のようになります。
class Widget{ void addDependency(Widget w}{..}}
class A extends Widget{...}
...
class G extends Widget{...}
A a = new A();
...
G g = new G();
a.addDependency(b);
b.addDependency(c);
b.addDependency(d);
b.addDependency(f);
c.addDependency(g);
明らかに、ウィジェットの @Autowired コレクションだけを持つことはできません。これは、すべてのウィジェットのコレクションを取得するためです。@Autowired を除外して、特定のサブタイプのインスタンスのみを取得する方法はありますか?
私が好きではないこれを行うには2つの方法があります。1 つ目は、すべての非ウィジェット Bean をワイヤリングし、コンテキストがロードされた後にウィジェット コレクションを一緒にワイヤリングすることです。これを行うもう 1 つの方法は、@Resource を使用して ApplicationContext にワイヤリングし、@PostConstructor を使用して必要なものを取得することです。 ApplicationContext から必要です。どちらもエレガントではないようですが、別の方法はありますか?