public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements SingletonBeanRegistry
SingletonBeanRegistry
を実装する、共有 Bean インスタンスの汎用レジストリ。レジストリのすべての呼び出し元で共有する必要のあるシングルトンインスタンスを登録し、Bean 名で取得できるようにします。 また、レジストリのシャットダウン時に破棄される DisposableBean
インスタンスの登録(登録されたシングルトンに対応する場合と対応しない場合があります)もサポートします。Bean 間の依存関係を登録して、適切なシャットダウン順序を強制できます。
このクラスは主に BeanFactory
実装の基本クラスとして機能し、シングルトン Bean インスタンスの一般的な管理を除外します。ConfigurableBeanFactory
インターフェースは SingletonBeanRegistry
インターフェースを継承することに注意してください。
このクラスは、AbstractBeanFactory
および DefaultListableBeanFactory
(これを継承する)とは対照的に、Bean 定義の概念も Bean インスタンスの特定の作成プロセスも想定していないことに注意してください。または、委譲先のネストされたヘルパーとして使用することもできます。
logger
コンストラクターと説明 |
---|
DefaultSingletonBeanRegistry() |
修飾子と型 | メソッドと説明 |
---|---|
protected void | addSingleton(StringSE beanName, ObjectSE singletonObject) 指定されたシングルトンオブジェクトをこのファクトリのシングルトンキャッシュに追加します。 |
protected void | addSingletonFactory(StringSE beanName, ObjectFactory<?> singletonFactory) 必要に応じて、指定されたシングルトンを構築するために、指定されたシングルトンファクトリを追加します。 |
protected void | afterSingletonCreation(StringSE beanName) シングルトン作成後のコールバック。 |
protected void | beforeSingletonCreation(StringSE beanName) シングルトン作成前のコールバック。 |
protected void | clearSingletonCache() このレジストリ内のすべてのキャッシュされたシングルトンインスタンスをクリアします。 |
boolean | containsSingleton(StringSE beanName) このレジストリに、指定された名前のシングルトンインスタンスが含まれているかどうかを確認します。 |
protected void | destroyBean(StringSE beanName, DisposableBean bean) 指定された Bean を破棄します。 |
void | destroySingleton(StringSE beanName) 指定された Bean を破棄します。 |
void | destroySingletons() |
StringSE[] | getDependenciesForBean(StringSE beanName) 指定された Bean が依存するすべての Bean の名前を返します(存在する場合)。 |
StringSE[] | getDependentBeans(StringSE beanName) 指定された Bean に依存するすべての Bean の名前を返します(存在する場合)。 |
ObjectSE | getSingleton(StringSE beanName) 指定された名前で登録された(生の)シングルトンオブジェクトを返します。 |
protected ObjectSE | getSingleton(StringSE beanName, boolean allowEarlyReference) 指定された名前で登録された(生の)シングルトンオブジェクトを返します。 |
ObjectSE | getSingleton(StringSE beanName, ObjectFactory<?> singletonFactory) 指定された名前で登録された(生の)シングルトンオブジェクトを返し、まだ登録されていない場合は新しいオブジェクトを作成して登録します。 |
int | getSingletonCount() このレジストリに登録されているシングルトン Bean の数を返します。 |
ObjectSE | getSingletonMutex() シングルトンミューテックスをサブクラスおよび外部の協力者に公開します。 |
StringSE[] | getSingletonNames() このレジストリに登録されているシングルトン Bean の名前を返します。 |
protected boolean | hasDependentBean(StringSE beanName) 指定された名前に依存する Bean が登録されているかどうかを判別します。 |
protected boolean | isActuallyInCreation(StringSE beanName) |
boolean | isCurrentlyInCreation(StringSE beanName) |
protected boolean | isDependent(StringSE beanName, StringSE dependentBeanName) 指定された依存 Bean が、指定された Bean またはその推移的な依存関係のいずれかに依存するものとして登録されているかどうかを判別します。 |
boolean | isSingletonCurrentlyInCreation(StringSE beanName) 指定されたシングルトン Bean が現在(ファクトリ全体内で)作成中かどうかを返します。 |
protected void | onSuppressedException(ExceptionSE ex) シングルトン Bean インスタンスの作成中に発生した例外を登録します。 |
void | registerContainedBean(StringSE containedBeanName, StringSE containingBeanName) 2 つの Bean 間の包含関連を登録します。 |
void | registerDependentBean(StringSE beanName, StringSE dependentBeanName) 所定の Bean が破棄される前に破棄される、所定の Bean の依存 Bean を登録します。 |
void | registerDisposableBean(StringSE beanName, DisposableBean bean) 指定された Bean をこのレジストリの使い捨て Bean のリストに追加します。 |
void | registerSingleton(StringSE beanName, ObjectSE singletonObject) 指定された既存のオブジェクトを、指定された Bean 名で、Bean レジストリにシングルトンとして登録します。 |
protected void | removeSingleton(StringSE beanName) このファクトリのシングルトンキャッシュから指定された名前の Bean を削除し、作成が失敗した場合にシングルトンの積極的な登録をクリーンアップできるようにします。 |
void | setCurrentlyInCreation(StringSE beanName, boolean inCreation) |
allowAliasOverriding, canonicalName, checkForAliasCircle, getAliases, hasAlias, isAlias, registerAlias, removeAlias, resolveAliases
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public void registerSingleton(StringSE beanName, ObjectSE singletonObject) throws IllegalStateExceptionSE
SingletonBeanRegistry
与えられたインスタンスは完全に初期化されることになっています。レジストリは初期化コールバックを実行しません(特に、InitializingBean の afterPropertiesSet
メソッドを呼び出しません)。指定されたインスタンスは、(DisposableBean の destroy
メソッドのような)破棄コールバックも受け取りません。
完全な BeanFactory 内で実行する場合: Bean が初期化および / または破棄コールバックを受け取ることになっている場合、既存のインスタンスの代わりに Bean 定義を登録します。
通常、レジストリ設定中に呼び出されますが、シングルトンのランタイム登録にも使用できます。結果として、レジストリ実装はシングルトンアクセスを同期する必要があります。BeanFactory のシングルトンの遅延初期化をサポートする場合、これを行う必要があります。
SingletonBeanRegistry
の registerSingleton
beanName
- Bean の名前 singletonObject
- 既存のシングルトンオブジェクト IllegalStateExceptionSE
InitializingBean.afterPropertiesSet()
, DisposableBean.destroy()
, BeanDefinitionRegistry.registerBeanDefinition(java.lang.String, org.springframework.beans.factory.config.BeanDefinition)
protected void addSingleton(StringSE beanName, ObjectSE singletonObject)
シングルトンの積極的な登録のために呼び出されます。
beanName
- Bean の名前 singletonObject
- シングルトンオブジェクト protected void addSingletonFactory(StringSE beanName, ObjectFactory<?> singletonFactory)
シングルトンの先行した登録を求められる循環参照を解決できるようにします。
beanName
- Bean の名前 singletonFactory
- シングルトンオブジェクトのファクトリ @Nullable public ObjectSE getSingleton(StringSE beanName)
SingletonBeanRegistry
すでにインスタンス化されているシングルトンのみをチェックします。まだインスタンス化されていないシングルトン Bean 定義のオブジェクトを返しません。
このメソッドの主な目的は、手動で登録されたシングルトンにアクセスすることです(SingletonBeanRegistry.registerSingleton(java.lang.String, java.lang.Object)
を参照)。また、すでに作成されている Bean 定義によって定義されたシングルトンにそのままのメソッドでアクセスするためにも使用できます。
注意 : この検索方法は、FactoryBean のプレフィックスまたはエイリアスを認識しません。シングルトンインスタンスを取得する前に、最初に正規の Bean 名を解決する必要があります。
SingletonBeanRegistry
の getSingleton
beanName
- 検索する Bean の名前 null
ConfigurableListableBeanFactory.getBeanDefinition(java.lang.String)
@Nullable protected ObjectSE getSingleton(StringSE beanName, boolean allowEarlyReference)
すでにインスタンス化されているシングルトンをチェックし、現在作成されているシングルトンへの早期参照も可能にします(循環参照の解決)。
beanName
- 検索する Bean の名前 allowEarlyReference
- 早期参照を作成する必要があるかどうか null
public ObjectSE getSingleton(StringSE beanName, ObjectFactory<?> singletonFactory)
beanName
- Bean の名前 singletonFactory
- 必要に応じてシングルトンを遅延作成する ObjectFactoryprotected void onSuppressedException(ExceptionSE ex)
デフォルトの実装では、このレジストリの抑制された例外のコレクションにある特定の例外が 100 例外まで保持され、関連する原因として最終的なトップレベルの BeanCreationException
に追加されます。
ex
- 登録する例外 BeanCreationException.getRelatedCauses()
protected void removeSingleton(StringSE beanName)
beanName
- Bean の名前 getSingletonMutex()
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 名を解決する必要があります。
SingletonBeanRegistry
の containsSingleton
beanName
- 検索する Bean の名前 SingletonBeanRegistry.registerSingleton(java.lang.String, java.lang.Object)
, ListableBeanFactory.containsBeanDefinition(java.lang.String)
, BeanFactory.containsBean(java.lang.String)
public StringSE[] getSingletonNames()
SingletonBeanRegistry
すでにインスタンス化されているシングルトンのみをチェックします。まだインスタンス化されていないシングルトン Bean 定義の名前は返しません。
このメソッドの主な目的は、手動で登録されたシングルトンをチェックすることです(SingletonBeanRegistry.registerSingleton(java.lang.String, java.lang.Object)
を参照)。Bean 定義で定義されているシングルトンがすでに作成されているかどうかを確認するためにも使用できます。
SingletonBeanRegistry
の getSingletonNames
null
)SingletonBeanRegistry.registerSingleton(java.lang.String, java.lang.Object)
, BeanDefinitionRegistry.getBeanDefinitionNames()
, ListableBeanFactory.getBeanDefinitionNames()
public int getSingletonCount()
SingletonBeanRegistry
すでにインスタンス化されているシングルトンのみをチェックします。まだインスタンス化されていないシングルトン Bean 定義はカウントしません。
このメソッドの主な目的は、手動で登録されたシングルトンをチェックすることです(SingletonBeanRegistry.registerSingleton(java.lang.String, java.lang.Object)
を参照)。すでに作成されている Bean 定義によって定義されたシングルトンの数をカウントするためにも使用できます。
public void setCurrentlyInCreation(StringSE beanName, boolean inCreation)
public boolean isCurrentlyInCreation(StringSE beanName)
protected boolean isActuallyInCreation(StringSE beanName)
public boolean isSingletonCurrentlyInCreation(StringSE beanName)
beanName
- Bean の名前 protected void beforeSingletonCreation(StringSE beanName)
デフォルトの実装では、現在作成中のシングルトンを登録します。
beanName
- 作成されるシングルトンの名前 isSingletonCurrentlyInCreation(java.lang.String)
protected void afterSingletonCreation(StringSE beanName)
デフォルトの実装では、シングルトンはもう作成されていません。
beanName
- 作成されたシングルトンの名前 isSingletonCurrentlyInCreation(java.lang.String)
public void registerDisposableBean(StringSE beanName, DisposableBean bean)
使い捨て Bean は通常、登録済みのシングルトンに対応し、Bean 名と一致しますが、異なるインスタンスになる可能性があります(たとえば、Spring の DisposableBean インターフェースを自然に実装しないシングルトン用の DisposableBean アダプター)。
beanName
- Bean の名前 bean
- Bean インスタンス public void registerContainedBean(StringSE containedBeanName, StringSE containingBeanName)
また、含まれている Bean を、破棄の順序に関して、含まれている Bean に依存するものとして登録します。
containedBeanName
- 含まれている(内部)Bean の名前 containingBeanName
- 包含(外部)Bean の名前 registerDependentBean(java.lang.String, java.lang.String)
public void registerDependentBean(StringSE beanName, StringSE dependentBeanName)
beanName
- Bean の名前 dependentBeanName
- 依存 Bean の名前 protected boolean isDependent(StringSE beanName, StringSE dependentBeanName)
beanName
- チェックする Bean の名前 dependentBeanName
- 依存 Bean の名前 protected boolean hasDependentBean(StringSE beanName)
beanName
- チェックする Bean の名前 public StringSE[] getDependentBeans(StringSE beanName)
beanName
- Bean の名前 public StringSE[] getDependenciesForBean(StringSE beanName)
beanName
- Bean の名前 public void destroySingletons()
protected void clearSingletonCache()
public void destroySingleton(StringSE beanName)
destroyBean
に委譲します。beanName
- Bean の名前 destroyBean(java.lang.String, org.springframework.beans.factory.DisposableBean)
protected void destroyBean(StringSE beanName, @Nullable DisposableBean bean)
beanName
- Bean の名前 bean
- 破棄する Bean インスタンス public final ObjectSE getSingletonMutex()
サブクラスは、何らかの拡張されたシングルトン作成フェーズを実行する場合、指定されたオブジェクトで同期する必要があります。特に、lazy-init の状況でデッドロックが発生する可能性を回避するために、サブクラスはシングルトンの作成に関与する独自のミューテックスを持っていてはなりません。
SingletonBeanRegistry
の getSingletonMutex
null
)