この記事では、java に関する関連知識を提供します。Spring フレームワークは Bean を管理する IoC コンテナであるため、Bean は Spring において当然重要なリソースです。Bean のスコープは次のとおりです。意味は何ですか?種類は何種類ありますか?一緒に見てみましょう。皆さんのお役に立てれば幸いです。
推奨学習: 「java ビデオ チュートリアル 」
Spring フレームワークは Bean を管理する IoC コンテナであるため、Bean は当然 Spring ですBean の重要なリソースですが、Bean のスコープとは何を意味しますか?種類は何種類ありますか?次に見てみましょう。
PS: Java のパブリック クラスは、Bean または Java Bean と呼ばれます。
Bean のスコープは、Spring フレームワーク全体における Bean の特定の動作モードを指します。たとえば、シングルトンスコープとは、Bean のコピーが Spring 全体に 1 つだけ存在し、グローバルに共有されることを意味し、誰かが値を変更すると、別の人が読み取るのは変更された値になります。
例として、Spring でシングルトン Bean オブジェクトのユーザーを定義します (デフォルトのスコープはシングルトンです)。具体的な実装コードは次のとおりです:
@Component public class UserBean { @Bean public User user() { User user = new User(); user.setId(1); user.setName("Java"); // 此行为重点:用户名称为 Java return user; } }
すると、クラス A では、ユーザー オブジェクトは次のようになります。クラス B で使用および変更されます。具体的な実装コードは次のとおりです。
@Controller public class AController { @Autowired private User user; public User getUser() { User user = user; user.setName("MySQL"); // 此行为重点:将 user 名称修改了 return user; } }
最後に、ユーザー オブジェクトはクラス B でも使用されます。具体的な実装コードは次のとおりです。
@Controller public class BController { @Autowired private User user; public User getUser() { User user = user; return user; } }
At今回は B オブジェクトにアクセスします getUser メソッドでは、このときのユーザー名が元の "Java" ではなく、クラス A で変更された "MySQL" になっていることがわかります。これは、Bean オブジェクトのユーザーがデフォルトでシングルトン スコープに設定されていることを意味します。 。このシングルトン オブジェクトがどこかで変更された場合、他のクラスは再度呼び出されたときに変更された値を取得します。
Spring には、Bean の 5 つの共通スコープがあります:
注: 最後の 3 つのスコープは、Spring MVC フレームワークにのみ適用されます。
正式な説明: (デフォルト) 単一の Bean 定義のスコープを、各 Spring IoC コンテナーの単一のオブジェクト インスタンスに設定します。
説明: このスコープはそこにあります。は、IoC コンテナ内の以下の Bean の 1 つのインスタンスにすぎません。取得された Bean (つまり、applicationContext.getBean およびその他のメソッドを通じて取得された) とアセンブルされた Bean (つまり、@Autowired を通じて注入された) は両方とも同じオブジェクトです。
シナリオ: 通常、ステートレス Bean はこのスコープを使用します。ステートレスとは、Bean オブジェクトのプロパティの状態を更新する必要がないことを意味します。
注: Spring はデフォルトでこのスコープを選択します。
正式な説明: 単一の Bean 定義のスコープを任意の数のオブジェクト インスタンスに設定します。
説明: このスコープ内の Bean が新しいインスタンスになるたびにBean の取得 (つまり、applicationContext.getBean やその他のメソッドを介して取得) と Bean の組み立て (つまり、@Autowired を介したそれらの注入) は、両方とも新しいオブジェクト インスタンスです。
シナリオ: 通常、ステートフル Bean はこのスコープを使用します。
正式な説明: 単一の Bean 定義のスコープを単一の HTTP リクエストのライフサイクルに設定します。つまり、各 HTTP リクエストには、単一 Bean 定義。Web 対応 Spring ApplicationContext のコンテキストでのみ有効です。
説明: 各 Http リクエストは、プロトタイプと同様に、新しい Bean インスタンスを作成します。
シナリオ: HTTP リクエストとレスポンスの共有 Bean。
注: Spring MVC フレームワークでの使用に限定されます。
正式な説明: 単一の Bean 定義のスコープを HTTP セッションのライフサイクルに設定します。Web 対応 Spring ApplicationContext のコンテキストでのみ有効です。
Description : Http セッションで、Bean インスタンスを定義します。
シナリオ: ユーザー セッションの共有 Bean。例: ユーザーのログイン情報を記録します。
注: Spring MVC フレームワークでの使用に限定されます。
正式な説明: 単一の Bean 定義のスコープを ServletContext のライフサイクルに設定します。Web 対応 Spring ApplicationContext のコンテキストでのみ有効です。
説明: Http Servlet Context で、Bean インスタンスを定義します。
シナリオ: Web アプリケーションのコンテキスト情報 (アプリケーションの共有情報の記録など)。
注: Spring MVC フレームワークでの使用に限定されます。
@Scope アノテーションを使用して Bean のスコープを設定できます。設定方法は 2 つあります:
スコープを直接設定する 特定の値@Scope("prototype");
ConfigurableBeanFactory および WebApplicationContext によって提供される SCOPE_XXX 変数 (@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) など) を設定します。
具体的な設定コードは次のとおりです:
#Bean のスコープは、Spring フレームワーク全体における Bean の特定の動作パターンを指します。 Beanの共通スコープはシングルトン(シングルケーススコープ)、プロトタイプ(プロトタイプスコープ)、リクエスト(リクエストスコープ)、セッション(リクエストスコープ)、アプリケーション(グローバルスコープ)の5つで、最後の3つの機能に注目してください。 Spring MVC フレームワークでのみ利用可能です。 推奨学習: 「Java ビデオ チュートリアル 」
以上がJavaによるBeanスコープの詳細分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。