2

コードで MyClass クラスの多数のオブジェクトを作成します。

public class MyClass {

    private String a;
    private Integer b;
    private SomeObject c;

    public A(String a, Integer b, SomeObject c) {
        this.a = a; this.b = b; this.c = c;
    }

}

とにかく、MyClass のオブジェクトを作成するときに、Spring を使用して SomeObject だけをこのクラスに挿入できますか。MyClass は、コード内で同じオブジェクトをランダムに作成する必要があるため、Spring Managedではありません。これを解決しようとする方法。

  1. SomeObject のメイン メソッドで getBean を実行し、そのオブジェクトを作成するたびに MyClass に渡します。

  2. ApplicationContextAware である SomeObjectSingleton を作成します (それ自体が getBean を実行して SomeObject を取得します)。MyClass コンストラクターで SomeObjectSingleton.getImpl を直接呼び出します。

どちらの方法が最も適切だと思いますか、またはこれを解決するための他のより良い方法はありますか?

4

1 に答える 1

2

Spring マネージド ソリューション

MyClassSpring 管理の作成に問題がない場合は、プロパティを に設定できますsingletonfalse。そうすれば、 を呼び出すたびにcontext.getBean()、 の新しいインスタンスMyClassがインスタンス化されます。

次に、コンテキスト XML ファイルで、他の 2 つのプロパティ (と) を設定せずにワイヤリングSomeObjectしてそのままにしておくことができます。注意点は、少なくともコンテキスト XML ファイルで設定されていないプロパティについては、コンストラクター インジェクションの代わりにセッター インジェクションを使用する必要があることです。MyClassString aInteger b

非 Spring マネージド ソリューション

何らかの理由MyClassで Spring で管理する必要がない場合は、最初のアプローチをお勧めします。これは、2 番目のアプローチよりもSomeObjectとの間の結合が弱いためです。MyClassシングルトンは本質的に依存関係を隠す一種のグローバル変数であるため、過度に使用するとコードが混乱する可能性があります。より詳細な議論については、こちらを参照してください。

于 2012-04-30T01:40:05.883 に答える