私はSpringフレームワークを学んでおり、現在それに関する本を読んでいます。この本では、Spring シングルトンは Java シングルトンとは異なると言っていますか? これは何を意味し、どのような違いがありますか? ありがとう
2 に答える
JavaシングルトンはJavaクラスローダーによってスコープされ、Springシングルトンはコンテナーコンテキストによってスコープされます。
これは基本的に、Javaでは、シングルトンがロードされたクラスローダーのコンテキスト内でのみ真にシングルトンであることを確認できることを意味します。他のクラスローダーは、それを防ぐためのコードのすべての努力にもかかわらず、その別のインスタンスを作成できる必要があります(クラスローダーが同じクラスローダー階層にない場合)。
Springでは、シングルトンクラスを2つの異なるコンテキストでロードできれば、シングルトンの概念を破ることができます。
したがって、要約すると、Javaは、特定のクラスローダー内にそのクラスの複数のインスタンスを作成できない場合はシングルトンと見なしますが、Springは、特定のコンテナー内にクラスの複数のインスタンスを作成できない場合はシングルトンと見なします。コンテクスト。
インスタンス化が 1 つに制限されている設計パターンごとの Java シングルトン (通常はコードによるJVMクラス ローダーごと)。ウィキペディア
Spring シングルトン Bean は、作成する任意の通常のクラスにすることができますが、そのスコープをシングルトンとして宣言することは、Spring が 1 つのインスタンスのみを作成し、宣言された Bean を参照するすべての Bean への参照を提供することを意味します。アプリケーションにそのクラスのインスタンスが多数ある場合がありますが、その Beanに対して作成されるのは 1 つだけです。同じクラスの複数の Bean がすべてシングルトンとして宣言されている場合もあります。各 Bean は、クラスのインスタンスを 1 つだけ作成します。 春 3.1 ドキュメント