web-dev-qa-db-ja.com

Springシングルトンとa Java singleton(design pattern))の違いは何ですか?

私はSpringフレームワークを学び、現在それについての本を読んでいます。この本では、SpringシングルトンはJavaシングルトンとは異なりますか?これは何を意味し、違いは何ですか?ありがとう

23
Hossein

JavaシングルトンはJavaクラスローダーによってスコープされ、Springシングルトンはコンテナコンテキストによってスコープされます。

つまり、Javaでは、シングルトンは、それをロードしたクラスローダーのコンテキスト内でのみ、本当にシングルトンであると確信できます。他のクラスローダーは、それを防止しようとするコードでのあらゆる努力にもかかわらず、(クラスローダーが同じクラスローダー階層にない場合)別のインスタンスを作成できる必要があります。

Springでは、シングルトンクラスを2つの異なるコンテキストでロードできれば、シングルトンの概念を打ち破ることができます。

したがって、要約すると、Javaは、特定のクラスローダー内でそのクラスのインスタンスを複数作成できない場合はシングルトンと見なしますが、Springは複数を作成できない場合はシングルトンと見なします特定のコンテナ/コンテキスト内のクラスのインスタンス。

27
Edwin Dalorzo

A Javaシングルトン、インスタンス化が1つに制限されている設計パターン、通常は JVM コードによるクラスローダー。 ウィキペディア

SpringシングルトンBeanは任意の通常のクラスにすることができますが、スコープをシングルトンとして宣言すると、Springはインスタンスを1つだけ作成し、宣言されたBeanを参照するすべてのBeanへの参照を提供します。アプリケーションにはそのクラスのインスタンスが多数ある場合がありますが、そのBeanに対して1つだけ作成されます。同じクラスの複数のBeanをすべてシングルトンとして宣言することもできます。各Beanは、クラスのインスタンスを1つだけ作成します。 Spring 3.1ドキュメント

4
C. Ross