クラス DefaultSingletonBeanRegistry

java.lang.ObjectSE
org.springframework.core.SimpleAliasRegistry
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry
実装されたすべてのインターフェース:
SingletonBeanRegistryAliasRegistry
既知の直属サブクラス
FactoryBeanRegistrySupport

public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements SingletonBeanRegistry
SingletonBeanRegistry を実装する、共有 Bean インスタンスの汎用レジストリ。レジストリのすべての呼び出し元で共有する必要のあるシングルトンインスタンスを登録し、Bean 名で取得できるようにします。

また、レジストリのシャットダウン時に破棄される DisposableBean インスタンスの登録(登録されたシングルトンに対応する場合と対応しない場合があります)もサポートします。Bean 間の依存関係を登録して、適切なシャットダウン順序を強制できます。

このクラスは主に BeanFactory 実装の基本クラスとして機能し、シングルトン Bean インスタンスの一般的な管理を除外します。ConfigurableBeanFactory インターフェースは SingletonBeanRegistry インターフェースを継承することに注意してください。

このクラスは、AbstractBeanFactory および DefaultListableBeanFactory(これを継承する)とは対照的に、Bean 定義の概念も Bean インスタンスの特定の作成プロセスも想定していないことに注意してください。または、委譲先のネストされたヘルパーとして使用することもできます。

導入:
2.0
作成者:
Juergen Hoeller
関連事項:
  • コンストラクターの詳細

    • DefaultSingletonBeanRegistry

      public DefaultSingletonBeanRegistry()
  • メソッドの詳細

    • registerSingleton

      public void registerSingleton(StringSE beanName, ObjectSE singletonObject) throws IllegalStateExceptionSE
      インターフェースからコピーされた説明: SingletonBeanRegistry
      指定された既存のオブジェクトを、指定された Bean 名で、Bean レジストリにシングルトンとして登録します。

      与えられたインスタンスは完全に初期化されることになっています。レジストリは初期化コールバックを実行しません(特に、InitializingBean の afterPropertiesSet メソッドを呼び出しません)。指定されたインスタンスは、(DisposableBean の destroy メソッドのような)破棄コールバックも受け取りません。

      完全な BeanFactory 内で実行する場合: Bean が初期化および / または破棄コールバックを受け取ることになっている場合、既存のインスタンスの代わりに Bean 定義を登録します

      通常、レジストリ設定中に呼び出されますが、シングルトンのランタイム登録にも使用できます。結果として、レジストリ実装はシングルトンアクセスを同期する必要があります。BeanFactory のシングルトンの遅延初期化をサポートする場合、これを行う必要があります。

      次で指定:
      インターフェース SingletonBeanRegistryregisterSingleton 
      パラメーター:
      beanName - Bean の名前
      singletonObject - 既存のシングルトンオブジェクト
      例外:
      IllegalStateExceptionSE
      関連事項:
    • addSingleton

      protected void addSingleton(StringSE beanName, ObjectSE singletonObject)
      指定されたシングルトンオブジェクトをこのファクトリのシングルトンキャッシュに追加します。

      シングルトンの積極的な登録のために呼び出されます。

      パラメーター:
      beanName - Bean の名前
      singletonObject - シングルトンオブジェクト
    • addSingletonFactory

      protected void addSingletonFactory(StringSE beanName, ObjectFactory<?> singletonFactory)
      必要に応じて、指定されたシングルトンを構築するために、指定されたシングルトンファクトリを追加します。

      シングルトンの先行した登録を求められる循環参照を解決できるようにします。

      パラメーター:
      beanName - Bean の名前
      singletonFactory - シングルトンオブジェクトのファクトリ
    • getSingleton

      @Nullable public ObjectSE getSingleton(StringSE beanName)
      インターフェースからコピーされた説明: SingletonBeanRegistry
      指定された名前で登録された(生の)シングルトンオブジェクトを返します。

      すでにインスタンス化されているシングルトンのみをチェックします。まだインスタンス化されていないシングルトン Bean 定義のオブジェクトを返しません。

      このメソッドの主な目的は、手動で登録されたシングルトンにアクセスすることです(SingletonBeanRegistry.registerSingleton(java.lang.String, java.lang.Object) を参照)。また、すでに作成されている Bean 定義によって定義されたシングルトンにそのままのメソッドでアクセスするためにも使用できます。

      注意 : この検索方法は、FactoryBean のプレフィックスまたはエイリアスを認識しません。シングルトンインスタンスを取得する前に、最初に正規の Bean 名を解決する必要があります。

      次で指定:
      インターフェース SingletonBeanRegistrygetSingleton 
      パラメーター:
      beanName - 検索する Bean の名前
      戻り値:
      登録されたシングルトンオブジェクト。見つからない場合は null 
      関連事項:
    • getSingleton

      @Nullable protected ObjectSE getSingleton(StringSE beanName, boolean allowEarlyReference)
      指定された名前で登録された(生の)シングルトンオブジェクトを返します。

      すでにインスタンス化されているシングルトンをチェックし、現在作成されているシングルトンへの早期参照も可能にします(循環参照の解決)。

      パラメーター:
      beanName - 検索する Bean の名前
      allowEarlyReference - 早期参照を作成する必要があるかどうか
      戻り値:
      登録されたシングルトンオブジェクト。見つからない場合は null 
    • getSingleton

      public ObjectSE getSingleton(StringSE beanName, ObjectFactory<?> singletonFactory)
      指定された名前で登録された(生の)シングルトンオブジェクトを返し、まだ登録されていない場合は新しいオブジェクトを作成して登録します。
      パラメーター:
      beanName - Bean の名前
      singletonFactory - 必要に応じてシングルトンを遅延作成する ObjectFactory
      戻り値:
      登録されたシングルトンオブジェクト
    • onSuppressedException

      protected void onSuppressedException(ExceptionSE ex)
      シングルトン Bean インスタンスの作成中に発生した例外を登録します。一時的な循環参照解決の問題。

      デフォルトの実装では、このレジストリの抑制された例外のコレクションにある特定の例外が 100 例外まで保持され、関連する原因として最終的なトップレベルの BeanCreationException に追加されます。

      パラメーター:
      ex - 登録する例外
      関連事項:
    • removeSingleton

      protected void removeSingleton(StringSE beanName)
      このファクトリのシングルトンキャッシュから指定された名前の Bean を削除し、作成が失敗した場合にシングルトンの積極的な登録をクリーンアップできるようにします。
      パラメーター:
      beanName - Bean の名前
      関連事項:
    • containsSingleton

      public boolean containsSingleton(StringSE beanName)
      インターフェースからコピーされた説明: SingletonBeanRegistry
      このレジストリに、指定された名前のシングルトンインスタンスが含まれているかどうかを確認します。

      すでにインスタンス化されているシングルトンのみをチェックします。まだインスタンス化されていないシングルトン Bean 定義の true を返しません。

      このメソッドの主な目的は、手動で登録されたシングルトンをチェックすることです(SingletonBeanRegistry.registerSingleton(java.lang.String, java.lang.Object) を参照)。Bean 定義で定義されたシングルトンがすでに作成されているかどうかを確認するためにも使用できます。

      Bean ファクトリに特定の名前の Bean 定義が含まれているかどうかを確認するには、ListableBeanFactory の containsBeanDefinition を使用します。containsBeanDefinition と containsSingleton の両方を呼び出すと、特定の Bean ファクトリに、指定された名前のローカル Bean インスタンスが含まれているかどうかがわかります。

      BeanFactory の containsBean を使用して、ファクトリが特定の名前の Bean を知っているかどうか(手動でシングルトンインスタンスを登録したか、Bean 定義によって作成されたか)を確認し、祖先ファクトリもチェックします。

      注意 : この検索方法は、FactoryBean のプレフィックスまたはエイリアスを認識しません。シングルトンステータスを確認する前に、最初に正規の Bean 名を解決する必要があります。

      次で指定:
      インターフェース SingletonBeanRegistrycontainsSingleton 
      パラメーター:
      beanName - 検索する Bean の名前
      戻り値:
      この Bean ファクトリに、指定された名前のシングルトンインスタンスが含まれている場合
      関連事項:
    • getSingletonNames

      public StringSE[] getSingletonNames()
      インターフェースからコピーされた説明: SingletonBeanRegistry
      このレジストリに登録されているシングルトン Bean の名前を返します。

      すでにインスタンス化されているシングルトンのみをチェックします。まだインスタンス化されていないシングルトン Bean 定義の名前は返しません。

      このメソッドの主な目的は、手動で登録されたシングルトンをチェックすることです(SingletonBeanRegistry.registerSingleton(java.lang.String, java.lang.Object) を参照)。Bean 定義で定義されているシングルトンがすでに作成されているかどうかを確認するためにも使用できます。

      次で指定:
      インターフェース SingletonBeanRegistrygetSingletonNames 
      戻り値:
      文字列配列としての名前のリスト (非 null)
      関連事項:
    • getSingletonCount

      public int getSingletonCount()
      インターフェースからコピーされた説明: SingletonBeanRegistry
      このレジストリに登録されているシングルトン Bean の数を返します。

      すでにインスタンス化されているシングルトンのみをチェックします。まだインスタンス化されていないシングルトン Bean 定義はカウントしません。

      このメソッドの主な目的は、手動で登録されたシングルトンをチェックすることです(SingletonBeanRegistry.registerSingleton(java.lang.String, java.lang.Object) を参照)。すでに作成されている Bean 定義によって定義されたシングルトンの数をカウントするためにも使用できます。

      次で指定:
      インターフェース SingletonBeanRegistrygetSingletonCount 
      戻り値:
      シングルトン Bean の数
      関連事項:
    • setCurrentlyInCreation

      public void setCurrentlyInCreation(StringSE beanName, boolean inCreation)
    • isCurrentlyInCreation

      public boolean isCurrentlyInCreation(StringSE beanName)
    • isActuallyInCreation

      protected boolean isActuallyInCreation(StringSE beanName)
    • isSingletonCurrentlyInCreation

      public boolean isSingletonCurrentlyInCreation(@Nullable StringSE beanName)
      指定されたシングルトン Bean が現在(ファクトリ全体内で)作成中かどうかを返します。
      パラメーター:
      beanName - Bean の名前
    • beforeSingletonCreation

      protected void beforeSingletonCreation(StringSE beanName)
      シングルトン作成前のコールバック。

      デフォルトの実装では、現在作成中のシングルトンを登録します。

      パラメーター:
      beanName - 作成されるシングルトンの名前
      関連事項:
    • afterSingletonCreation

      protected void afterSingletonCreation(StringSE beanName)
      シングルトン作成後のコールバック。

      デフォルトの実装では、シングルトンはもう作成されていません。

      パラメーター:
      beanName - 作成されたシングルトンの名前
      関連事項:
    • registerDisposableBean

      public void registerDisposableBean(StringSE beanName, DisposableBean bean)
      指定された Bean をこのレジストリの使い捨て Bean のリストに追加します。

      使い捨て Bean は通常、登録済みのシングルトンに対応し、Bean 名と一致しますが、異なるインスタンスになる可能性があります(たとえば、Spring の DisposableBean インターフェースを自然に実装しないシングルトン用の DisposableBean アダプター)。

      パラメーター:
      beanName - Bean の名前
      bean - Bean インスタンス
    • registerContainedBean

      public void registerContainedBean(StringSE containedBeanName, StringSE containingBeanName)
      2 つの Bean 間の包含関連を登録します。内部 Bean とそれを含む外部 Bean の間。

      また、含まれている Bean を、破棄の順序に関して、含まれている Bean に依存するものとして登録します。

      パラメーター:
      containedBeanName - 含まれている(内部)Bean の名前
      containingBeanName - 包含(外部)Bean の名前
      関連事項:
    • registerDependentBean

      public void registerDependentBean(StringSE beanName, StringSE dependentBeanName)
      所定の Bean が破棄される前に破棄される、所定の Bean の依存 Bean を登録します。
      パラメーター:
      beanName - Bean の名前
      dependentBeanName - 依存 Bean の名前
    • isDependent

      protected boolean isDependent(StringSE beanName, StringSE dependentBeanName)
      指定された依存 Bean が、指定された Bean またはその推移的な依存関係のいずれかに依存するものとして登録されているかどうかを判別します。
      パラメーター:
      beanName - チェックする Bean の名前
      dependentBeanName - 依存 Bean の名前
      導入:
      4.0
    • hasDependentBean

      protected boolean hasDependentBean(StringSE beanName)
      指定された名前に依存する Bean が登録されているかどうかを判別します。
      パラメーター:
      beanName - チェックする Bean の名前
    • getDependentBeans

      public StringSE[] getDependentBeans(StringSE beanName)
      指定された Bean に依存するすべての Bean の名前を返します(存在する場合)。
      パラメーター:
      beanName - Bean の名前
      戻り値:
      依存する Bean 名の配列、ない場合は空の配列
    • getDependenciesForBean

      public StringSE[] getDependenciesForBean(StringSE beanName)
      指定された Bean が依存するすべての Bean の名前を返します(存在する場合)。
      パラメーター:
      beanName - Bean の名前
      戻り値:
      Bean が依存する Bean の名前の配列、ない場合は空の配列
    • destroySingletons

      public void destroySingletons()
    • clearSingletonCache

      protected void clearSingletonCache()
      このレジストリ内のすべてのキャッシュされたシングルトンインスタンスをクリアします。
      導入:
      4.3.15
    • destroySingleton

      public void destroySingleton(StringSE beanName)
      与えられた Bean を破棄します。対応する使い捨て Bean インスタンスが見つかった場合は、destroyBean に委譲します。
      パラメーター:
      beanName - Bean の名前
      関連事項:
    • destroyBean

      protected void destroyBean(StringSE beanName, @Nullable DisposableBean bean)
      与えられた Bean を破棄します。Bean 自体の前に、指定された Bean に依存する Bean を破棄する必要があります。例外をスローするべきではありません。
      パラメーター:
      beanName - Bean の名前
      bean - 破棄する Bean インスタンス
    • getSingletonMutex

      public final ObjectSE getSingletonMutex()
      シングルトンミューテックスをサブクラスおよび外部の協力者に公開します。

      サブクラスは、何らかの拡張されたシングルトン作成フェーズを実行する場合、指定されたオブジェクトで同期する必要があります。特に、lazy-init の状況でデッドロックが発生する可能性を回避するために、サブクラスはシングルトンの作成に関与する独自のミューテックスを持っててはなりません

      次で指定:
      インターフェース SingletonBeanRegistrygetSingletonMutex 
      戻り値:
      ミューテックスオブジェクト (非 null)