JavaによるBeanスコープの詳細分析

WBOY
リリース: 2022-08-31 17:28:04
転載
1459 人が閲覧しました

この記事では、java に関する関連知識を提供します。Spring フレームワークは Bean を管理する IoC コンテナであるため、Bean は Spring において当然重要なリソースです。Bean のスコープは次のとおりです。意味は何ですか?種類は何種類ありますか?一緒に見てみましょう。皆さんのお役に立てれば幸いです。

JavaによるBeanスコープの詳細分析

推奨学習: 「java ビデオ チュートリアル

Spring フレームワークは Bean を管理する IoC コンテナであるため、Bean は当然 Spring ですBean の重要なリソースですが、Bean のスコープとは何を意味しますか?種類は何種類ありますか?次に見てみましょう。

PS: Java のパブリック クラスは、Bean または Java Bean と呼ばれます。

1. スコープ

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 オブジェクトのユーザーがデフォルトでシングルトン スコープに設定されていることを意味します。 。このシングルトン オブジェクトがどこかで変更された場合、他のクラスは再度呼び出されたときに変更された値を取得します。

2. スコープの分類

Spring には、Bean の 5 つの共通スコープがあります:

  • singleton: シングルトン スコープ;
  • prototype: プロトタイプスコープ (複数インスタンスのスコープ);
  • request: リクエスト スコープ;
  • session: セッション スコープ;
  • application: グローバル スコープ 。

注: 最後の 3 つのスコープは、Spring MVC フレームワークにのみ適用されます。

2.1 singleton

正式な説明: (デフォルト) 単一の Bean 定義のスコープを、各 Spring IoC コンテナーの単一のオブジェクト インスタンスに設定します。

説明: このスコープはそこにあります。は、IoC コンテナ内の以下の Bean の 1 つのインスタンスにすぎません。取得された Bean (つまり、applicationContext.getBean およびその他のメソッドを通じて取得された) とアセンブルされた Bean (つまり、@Autowired を通じて注入された) は両方とも同じオブジェクトです。

シナリオ: 通常、ステートレス Bean はこのスコープを使用します。ステートレスとは、Bean オブジェクトのプロパティの状態を更新する必要がないことを意味します。

注: Spring はデフォルトでこのスコープを選択します。

2.2 プロトタイプ

正式な説明: 単一の Bean 定義のスコープを任意の数のオブジェクト インスタンスに設定します。

説明: このスコープ内の Bean が新しいインスタンスになるたびにBean の取得 (つまり、applicationContext.getBean やその他のメソッドを介して取得) と Bean の組み立て (つまり、@Autowired を介したそれらの注入) は、両方とも新しいオブジェクト インスタンスです。

シナリオ: 通常、ステートフル Bean はこのスコープを使用します。

2.3 request

正式な説明: 単一の Bean 定義のスコープを単一の HTTP リクエストのライフサイクルに設定します。つまり、各 HTTP リクエストには、単一 Bean 定義。Web 対応 Spring ApplicationContext のコンテキストでのみ有効です。

説明: 各 Http リクエストは、プロトタイプと同様に、新しい Bean インスタンスを作成します。

シナリオ: HTTP リクエストとレスポンスの共有 Bean。

注: Spring MVC フレームワークでの使用に限定されます。

2.4 session

正式な説明: 単一の Bean 定義のスコープを HTTP セッションのライフサイクルに設定します。Web 対応 Spring ApplicationContext のコンテキストでのみ有効です。

Description : Http セッションで、Bean インスタンスを定義します。

シナリオ: ユーザー セッションの共有 Bean。例: ユーザーのログイン情報を記録します。

注: Spring MVC フレームワークでの使用に限定されます。

2.5 application

正式な説明: 単一の Bean 定義のスコープを ServletContext のライフサイクルに設定します。Web 対応 Spring ApplicationContext のコンテキストでのみ有効です。

説明: Http Servlet Context で、Bean インスタンスを定義します。

シナリオ: Web アプリケーションのコンテキスト情報 (アプリケーションの共有情報の記録など)。

注: Spring MVC フレームワークでの使用に限定されます。

3. スコープの設定

@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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:jb51.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート