springのサードレベルキャッシュの使い方

Springフレームワークの三段階キャッシュは、Beanの作成をキャッシュするために使用され、主な目的は循環依存関係の問題を解決することです。三段階キャッシュには、singletonFactories、earlySingletonObjects、singletonObjectsの3つのキャッシュが含まれています。

  1. シングルトンファクトリーキャッシュ:初期化が完了していないが、すでに作成されたBeanのファクトリーオブジェクトを保存します。Beanが必要な場合、まずこのキャッシュから検索し、対応するファクトリーオブジェクトが見つかればそのオブジェクトを使用して作成して返します。
  2. 初期のシングルトンオブジェクトのキャッシュ:初期化が完了しているが、まだすべてのライフサイクルメソッドが実行されていないBeanオブジェクトが保存されています。Beanの初期化メソッドが実行中の場合、そのBeanはearlySingletonObjectsキャッシュに配置されます。他のBeanがこのBeanに依存する必要があるときには、初期化済みのBeanオブジェクトがこのキャッシュから取得されます。
  3. シングルトンオブジェクトのキャッシュ:初期化が完了し、すべてのライフサイクルメソッドが実行されたBeanオブジェクトが保存されます。Beanの初期化メソッドが完了すると、earlySingletonObjectsキャッシュから削除され、初期化が完了したBeanオブジェクトがsingletonObjectsキャッシュに追加されます。

三つのキャッシュを使用する具体的な手順は以下の通りです。

  1. 最初に、DefaultSingletonBeanRegistryクラスのgetSingletonメソッドを使用して、Beanのキャッシュオブジェクトがすでに存在するかどうかを判断します。存在する場合は、singletonObjectsキャッシュから直接Beanオブジェクトを取得し、そうでない場合は次のステップに進みます。
  2. createBeanメソッドを呼び出してBeanオブジェクトを作成します。Beanオブジェクトを作成する際に、まずsingletonFactoriesキャッシュからBeanのファクトリオブジェクトが存在するかどうかを検索します。存在する場合は、そのファクトリオブジェクトを使用してBeanオブジェクトを作成し、作成されたBeanオブジェクトをearlySingletonObjectsキャッシュに格納します。
  3. その後、createBeanメソッドを実行して、Beanオブジェクトの初期化とライフサイクルメソッドの実行を完了します。このプロセスでは、他のBeanがこのBeanに依存している場合、初期化済みのBeanオブジェクトをearlySingletonObjectsキャッシュから取得します。
  4. 最後に、初期化が完了したBeanオブジェクトをsingletonObjectsキャッシュに入れ、earlySingletonObjectsキャッシュから削除する。

Springフレームワークは、三層キャッシュを使用することで、依存関係の循環を解消し、Beanの作成と初期化の効率を向上させることができます。

bannerAds