豆スコープ春はシングルトン、プロトタイプ、要求、セッション、globalSessionの5種類があります。リクエスト、セッション、globalSessionこれらの3つのスコープにのみWeb開発にに使用されている場合。
春にBeanを定義するときは、豆のステートメントは、宣言されていない場合、デフォルトのスコープがシングルトンであるスコープのオプションがあります。
豆1シングルトンの範囲は、各スプリングIoCコンテナの単一のインスタンスに制限を定義しました。
*用途:何もしない、デフォルトではシングルトンですが、あなたはまた、例えば、スコープ表示を追加することができます。
< ビーンID = "ユーザ" クラス= "com.zhbit.pojo.User" スコープ= "シングルトン" />
それでもシングルトンが何であるかを理解していない場合は、説明するための例を与えます:
@Test 公共 ボイド試験(){ ApplicationContextのコンテキスト = 新しい ClassPathXmlApplicationContext( "beans2.xml" )。 ユーザーユーザー = context.getBean( "ユーザー"、ユーザー。クラス); ユーザuser2 = context.getBean( "ユーザー"、ユーザー。クラス); System.out.println(ユーザー == user2が)。 }
結果:
出力は真です。実績のあるユーザーとuser2が同じオブジェクトであります!
結論:長い豆の範囲として、シングルトンであるように、ビーンIDの同じパラメータでgetBean()メソッドは、そのオブジェクトのインスタンスが同じです。
2プロトタイプ、買収豆の時点で、すべての要求、ときコンテナの初期化新しいインスタンスを作成します、それはあなたが使用する場合、注入豆の形で遅延ロードを使用して、インスタンスを作成しません、インスタンス化されます得られたオブジェクトの各インスタンスの同じではありません。
*用途:
< ビーンID = "ユーザ" クラス= "com.kuang.pojo.User" スコープ= "プロトタイプ" />
例示:
@Test 公共 ボイド試験(){ ApplicationContextのコンテキスト = 新しい ClassPathXmlApplicationContext( "beans2.xml" )。 ユーザーユーザー = context.getBean( "ユーザー"、ユーザー。クラス); ユーザuser2 = context.getBean( "ユーザー"、ユーザー。クラス); System.out.println(ユーザー == user2が)。 } }
結果:
出力は偽の、実績のあるユーザーとUser2が同じオブジェクトではありませんです。
3要求、すべてのHTTP要求のインスタンスを作成し、httpリクエストの現在のインスタンスのみが有効です
4セッションは、すべてのHTTP要求のインスタンスを作成し、HTTPセッションの現在のインスタンスのみが有効です
5 globalSession、グローバルセッションは、異なるポートレットの共有のために、ポートレットは、サーブレットのWebコンポーネントに似ているようです