Spring がデフォルトでシングルトンなのはなぜですか?

目次

1. 5つのスコープ

2. シングルトン Bean とプロトタイプ Bean の違い

 3. シングルトン Bean の長所と短所


1. 5つのスコープ

1.シングルトン:

singleton はSpring Bean のデフォルトのスコープであり、シングルトン モードです。アプリケーション全体でインスタンスが 1 つだけ作成され、Bean に対するすべてのリクエストがこのインスタンスを共有します。

2.プロトタイプ:

prototype はプロトタイプ モードを表し、リクエストごとに新しい Bean インスタンスが作成されます。したがって、アプリケーション内に複数のインスタンスが存在しても、相互に干渉することはありません。

3.リクエスト:

request は、HTTP リクエストのスコープ内で Bean インスタンスを作成することを意味します。HTTP リクエストが行われるたびに新しい Bean インスタンスが作成され、この Bean インスタンスは現在のリクエストでのみ使用できます。

4.セッション:

セッションとは、HTTP セッションのスコープ内で Bean インスタンスを作成することを意味します。セッション中に、Bean インスタンスは 1 つだけ作成されます。同じセッション中に複数のリクエストが行われた場合、これらのリクエストはすべて同じ Bean インスタンスを共有します。

5.グローバルセッション:

globalsession は、グローバル HTTP セッションのスコープ内で Bean インスタンスを作成することを意味します。この範囲は、ポートレットベースの Web アプリケーションにのみ適用されます。他の種類の Web アプリケーションの場合、globalsession スコープはセッション スコープと同じです。

2.シングルトン Bean とプロトタイプ Bean の違い

Bean がシングルトンとして宣言されている場合、複数のリクエストを処理するときに Spring コンテナ内で 1 つの Bean だけがインスタンス化され、後続のリクエストはこのオブジェクトを共有し、このオブジェクトはマップに保存されますリクエストが来ると、まずキャッシュ (マップ)にリクエストがあるかどうかを確認します。ある場合は、このオブジェクトを直接使用します。ない場合は、新しいオブジェクトがインスタンス化されるため、これはシングルトンです。ただし、プロトタイプBean の場合、リクエストが届くたびに新しい Bean が直接インスタンス化され、キャッシュやキャッシュからのチェックのプロセスは行われません。

 3. シングルトン Bean の長所と短所

アドバンテージ:

1.新しく生成されたインスタンスの消費量を削減する:新しく生成されたインスタンスの消費量には 2 つの側面があります。第一に、Spring はリフレクションまたは cglib を通じて Bean インスタンスを生成しますが、これはどちらもパフォーマンスを消費する操作です。第二に、オブジェクトへのメモリの割り当てにも複雑な処理が伴います。アルゴリズム。

2. jvm ガベージ コレクションの削減 : リクエストごとに Bean インスタンスが新たに生成されないため、自然にリサイクルされるオブジェクトが少なくなります。

3. Beanの取得が速い:シングルトンのBean取得動作は第一世代以外はキャッシュから取得するため、非常に高速です。

短所:

シングルトン Bean の大きな欠点は、スレッドセーフにできないことです。すべてのリクエストは Bean インスタンスを共有するため、この Bean がステートフル Bean である場合、同時シナリオで問題が発生する可能性がありますが、プロトタイプ Bean にはそのような問題は発生しません (ただし、シングルトン Bean に依存している場合などの例外はあります)。リクエストごとに新しいインスタンスが作成されます。

 

おすすめ

転載: blog.csdn.net/weixin_71921932/article/details/131047395