2

Spring シングルトン スコープの Bean (Spring コンテキストごとに 1 つのインスタンスがある) とシングルトン パターン (クラス ローダーに 1 つのインスタンスがある) の違いを理解しています。

多くの人にとって、Singleton パターンは (グローバル参照のようなものであるため) 悪と見なされていますが、Singleton スコープの Bean (これもグローバルに利用可能です) に反対する人は誰もいないようです。どうしてこれなの?

私は (デスクトップ) アプリを持っています。いくつかのオブジェクトへのグローバル アクセスが必要です。これは、多数のクラスやメソッドへの参照を渡すのが非常に面倒なためです。ただし、アプリの起動時間が重要なため、DI フレームワークは使用したくありません。ベストなデザインは?

4

3 に答える 3

6

public static-フレーバーのシングルトンは、グローバルであるためではなく、クラスに組み込まれているため、好ましくありません。たとえば、テストのためにモックすることは不可能だと人々は言うでしょう。ほんの一握りのグローバル オブジェクトしかない場合は、そのような単純な Java シングルトンを回避するためだけに Spring は必要ありません。ただし、相互に接続する必要がある実質的なオブジェクト グラフがある場合は、DI アプローチを使用すると、コードがよりきれいになります。

Spring には Bean のライフサイクルを管理するための便利な機能がたくさんあります。たとえば、シングルトンからプロトタイプにライフサイクルを簡単に変更できるのは特に便利です。このような要件は、コードの一部を同時に実行するという遅い決定が原因で発生する可能性があり、コードはスレッドセーフではないオブジェクトに依存しています。

于 2013-10-12T21:40:07.917 に答える
1

セッションスコープの Bean は、WebApplicationContext.

Spring (またはその他の IoC コンテナー) はこれらの Bean を作成する責任があり、アプリケーションが心配する必要があるのはそれらを要求することだけです。そのため、DI 管理のシングルトンを使用する方がはるかに優れている/簡単です。

于 2013-10-12T21:17:31.480 に答える