public interface BeanFactory これは、Bean コンテナーの基本的なクライアントビューです。ListableBeanFactory や ConfigurableBeanFactory などのその他のインターフェースは、特定の目的で使用できます。
このインターフェースは、文字列名によって一意に識別される複数の Bean 定義を保持するオブジェクトによって実装されています。Bean 定義に応じて、ファクトリは、含まれるオブジェクトの独立したインスタンス(プロトタイプデザインパターン)、または単一の共有インスタンス(シングルトンデザインパターンの優れた代替案で、ファクトリのスコープ内でインスタンスがシングルトンである)のいずれかを返します。どの型のインスタンスが返されるかは、Bean ファクトリの設定に依存します。API は同じです。Spring 2.0 以降、具体的なアプリケーションコンテキストに応じて、さらにスコープが利用可能になりました(例: Web 環境でのリクエストやセッションスコープ)。
このアプローチのポイントは、BeanFactory がアプリケーションコンポーネントの主要レジストリであり、アプリケーションコンポーネントの構成を一元化することです(たとえば、個々のオブジェクトがプロパティファイルを読み取る必要がなくなります)。このアプローチの利点については、"Expert One-on-One J2EE Design and Development" の第 4 章と第 11 章を参照してください。
BeanFactory ルックアップのような「プル」構成の形式を使用するよりも、setter またはコンストラクターを介してアプリケーションオブジェクトを構成するために、依存性注入(「プッシュ」構成)に依存する方が一般に良いことに注意してください。Spring の依存性注入機能は、この BeanFactory インターフェースとそのサブインターフェースを使用して実装されます。
通常、BeanFactory は、構成ソース(XML ドキュメントなど)に格納されている Bean 定義をロードし、org.springframework.beans パッケージを使用して Bean を構成します。ただし、実装は、必要に応じて作成した Java オブジェクトを Java コードで直接返すことができます。定義の保存方法に制限はありません。LDAP、RDBMS、XML、プロパティファイルなどです。実装は、Bean 間の参照をサポートすることをお勧めします(依存性注入)。
ListableBeanFactory のメソッドとは異なり、このインターフェースのすべての操作では、これが HierarchicalBeanFactory の場合、親ファクトリもチェックされます。このファクトリインスタンスに Bean が見つからない場合、直接の親ファクトリが要求されます。このファクトリインスタンスの Bean は、親ファクトリの同じ名前の Bean をオーバーライドすることになっています。
Bean ファクトリ実装は、標準の Bean ライフサイクルインターフェースを可能な限りサポートする必要があります。初期化メソッドとその標準的な順序の完全なセットは次のとおりです。
setBeanNamesetBeanClassLoadersetBeanFactorysetEnvironmentsetEmbeddedValueResolversetResourceLoader (アプリケーションコンテキストで実行する場合にのみ適用されます)setApplicationEventPublisher (アプリケーションコンテキストで実行する場合にのみ適用されます)setMessageSource (アプリケーションコンテキストで実行する場合にのみ適用されます)setApplicationContext (アプリケーションコンテキストで実行する場合にのみ適用されます)setServletContext (Web アプリケーションコンテキストで実行する場合にのみ適用可能)postProcessBeforeInitialization メソッド afterPropertiesSetinit-method 定義 postProcessAfterInitialization メソッド Bean ファクトリのシャットダウン時には、次のライフサイクルメソッドが適用されます。
postProcessBeforeDestruction メソッド destroydestroy-method 定義 BeanNameAware.setBeanName(java.lang.String), BeanClassLoaderAware.setBeanClassLoader(java.lang.ClassLoader), BeanFactoryAware.setBeanFactory(org.springframework.beans.factory.BeanFactory), EnvironmentAware.setEnvironment(org.springframework.core.env.Environment), EmbeddedValueResolverAware.setEmbeddedValueResolver(org.springframework.util.StringValueResolver), ResourceLoaderAware.setResourceLoader(org.springframework.core.io.ResourceLoader), ApplicationEventPublisherAware.setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher), MessageSourceAware.setMessageSource(org.springframework.context.MessageSource), ApplicationContextAware.setApplicationContext(org.springframework.context.ApplicationContext), ServletContextAware.setServletContext(javax.servlet.ServletContext), BeanPostProcessor.postProcessBeforeInitialization(java.lang.Object, java.lang.String), InitializingBean.afterPropertiesSet(), AbstractBeanDefinition.getInitMethodName(), BeanPostProcessor.postProcessAfterInitialization(java.lang.Object, java.lang.String), DestructionAwareBeanPostProcessor.postProcessBeforeDestruction(java.lang.Object, java.lang.String), DisposableBean.destroy(), AbstractBeanDefinition.getDestroyMethodName()| 修飾子と型 | フィールドと説明 |
|---|---|
static StringSE | FACTORY_BEAN_PREFIXFactoryBean インスタンスを逆参照し、FactoryBean によって作成された Bean と区別するために使用されます。 |
| 修飾子と型 | メソッドと説明 |
|---|---|
boolean | containsBean(StringSE name) この Bean ファクトリには、指定された名前の Bean 定義または外部登録されたシングルトンインスタンスが含まれているか判定します。 |
StringSE[] | getAliases(StringSE name) 存在する場合、指定された Bean 名のエイリアスを返します。 |
<T> T | getBean(ClassSE<T> requiredType) 指定されたオブジェクト型が存在する場合、一意に一致する Bean インスタンスを返します。 |
<T> T | getBean(ClassSE<T> requiredType, ObjectSE... args) 指定された Bean のインスタンス(共有または独立)を返します。 |
ObjectSE | getBean(StringSE name) 指定された Bean のインスタンス(共有または独立)を返します。 |
<T> T | getBean(StringSE name, ClassSE<T> requiredType) 指定された Bean のインスタンス(共有または独立)を返します。 |
ObjectSE | getBean(StringSE name, ObjectSE... args) 指定された Bean のインスタンス(共有または独立)を返します。 |
<T> ObjectProvider<T> | getBeanProvider(ClassSE<T> requiredType) 指定された Bean のプロバイダーを返します。これにより、可用性および一意性オプションを含め、インスタンスの遅延オンデマンド取得が可能になります。 |
<T> ObjectProvider<T> | getBeanProvider(ResolvableType requiredType) 指定された Bean のプロバイダーを返します。これにより、可用性および一意性オプションを含め、インスタンスの遅延オンデマンド取得が可能になります。 |
ClassSE<?> | getType(StringSE name) 指定された名前の Bean の型を判別します。 |
ClassSE<?> | getType(StringSE name, boolean allowFactoryBeanInit) 指定された名前の Bean の型を判別します。 |
boolean | isPrototype(StringSE name) この Bean はプロトタイプですか? つまり、 getBean(java.lang.String) は常に独立したインスタンスを返しますか? |
boolean | isSingleton(StringSE name) この Bean は共有シングルトンですか? つまり、 getBean(java.lang.String) は常に同じインスタンスを返しますか? |
boolean | isTypeMatch(StringSE name, ClassSE<?> typeToMatch) 指定された名前の Bean が指定された型と一致するかどうかを確認します。 |
boolean | isTypeMatch(StringSE name, ResolvableType typeToMatch) 指定された名前の Bean が指定された型と一致するかどうかを確認します。 |
static final StringSE FACTORY_BEAN_PREFIX
FactoryBean インスタンスを逆参照し、FactoryBean によって作成された Bean と区別するために使用されます。例: myJndiObject という名前の Bean が FactoryBean の場合、&myJndiObject を取得すると、ファクトリによって返されるインスタンスではなく、ファクトリが返されます。ObjectSE getBean(StringSE name) throws BeansException
この方法では、Spring BeanFactory をシングルトンまたはプロトタイプの設計パターンの代わりとして使用できます。シングルトン Bean の場合、呼び出し元は返されたオブジェクトへの参照を保持できます。
エイリアスを対応する正規の Bean 名に変換します。
このファクトリインスタンスで Bean が見つからないかどうかを親ファクトリに確認します。
name - 取得する Bean の名前 NoSuchBeanDefinitionException - 指定された名前の Bean がない場合 BeansException - Bean を取得できなかった場合 <T> T getBean(StringSE name, ClassSE<T> requiredType) throws BeansException
getBean(String) と同じように動作しますが、Bean が必要な型でない場合は BeanNotOfRequiredTypeException をスローすることにより、型安全の基準を提供します。これは、getBean(String) で発生する可能性があるように、結果を正しくキャストすると ClassCastException がスローされないことを意味します。
エイリアスを対応する正規の Bean 名に変換します。
このファクトリインスタンスで Bean が見つからないかどうかを親ファクトリに確認します。
name - 取得する Bean の名前 requiredType - Bean が一致する必要があることを入力します。インターフェースまたはスーパークラスにすることができます NoSuchBeanDefinitionException - そのような Bean 定義がない場合 BeanNotOfRequiredTypeException - Bean が必要な型でない場合 BeansException - Bean を作成できなかった場合 ObjectSE getBean(StringSE name, ObjectSE... args) throws BeansException
Bean 定義で指定されたデフォルト引数(存在する場合)をオーバーライドして、明示的なコンストラクター引数 / ファクトリメソッド引数を指定できます。
name - 取得する Bean の名前 args - 明示的な引数を使用して Bean インスタンスを作成するときに使用する引数 (既存のインスタンスを取得するのではなく、新しいインスタンスを作成するときにのみ適用されます)NoSuchBeanDefinitionException - そのような Bean 定義がない場合 BeanDefinitionStoreException - 引数は指定されているが、影響を受ける Bean がプロトタイプではない場合 BeansException - Bean を作成できなかった場合 <T> T getBean(ClassSE<T> requiredType) throws BeansException
このメソッドは、ListableBeanFactory の型別ルックアップ領域に入りますが、指定された型の名前に基づいた従来の名前別ルックアップにも変換できます。Bean のセット全体でより広範な検索操作を行うには、ListableBeanFactory または BeanFactoryUtils(あるいはその両方)を使用します。
requiredType - Bean が一致する必要があることを入力します。インターフェースまたはスーパークラスにすることができます NoSuchBeanDefinitionException - 指定された型の Bean が見つからなかった場合 NoUniqueBeanDefinitionException - 指定された型の複数の Bean が見つかった場合 BeansException - Bean を作成できなかった場合 ListableBeanFactory<T> T getBean(ClassSE<T> requiredType, ObjectSE... args) throws BeansException
Bean 定義で指定されたデフォルト引数(存在する場合)をオーバーライドして、明示的なコンストラクター引数 / ファクトリメソッド引数を指定できます。
このメソッドは、ListableBeanFactory の型別ルックアップ領域に入りますが、指定された型の名前に基づいた従来の名前別ルックアップにも変換できます。Bean のセット全体でより広範な検索操作を行うには、ListableBeanFactory または BeanFactoryUtils(あるいはその両方)を使用します。
requiredType - Bean が一致する必要があることを入力します。インターフェースまたはスーパークラスにすることができます args - 明示的な引数を使用して Bean インスタンスを作成するときに使用する引数 (既存のインスタンスを取得するのではなく、新しいインスタンスを作成するときにのみ適用されます)NoSuchBeanDefinitionException - そのような Bean 定義がない場合 BeanDefinitionStoreException - 引数は指定されているが、影響を受ける Bean がプロトタイプではない場合 BeansException - Bean を作成できなかった場合 <T> ObjectProvider<T> getBeanProvider(ClassSE<T> requiredType)
ジェネリクス型を照合するには、getBeanProvider(ResolvableType) を検討してください。
requiredType - Bean が一致する必要があることを入力します。インターフェースまたはスーパークラスにすることができます getBeanProvider(ResolvableType)<T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType)
リフレクティブインジェクションポイントとは対照的に、ここでは Bean のコレクションはサポートされていないことに注意してください。特定の型に一致する Bean のリストをプログラムで取得するには、ここで引数として実際の Bean 型を指定し、その後 ObjectProvider.orderedStream() またはその遅延ストリーミング / 反復オプションを使用します。
また、Java の割り当て規則に従って、ジェネリクスのマッチングはここでは厳密です。未チェックのセマンティクス(「未チェック」の Java コンパイラー警告と同様)を使用した寛大なフォールバックマッチングの場合、このバリアントとの完全な汎用一致が available でない場合は、2 番目のステップとして raw 型を使用して getBeanProvider(Class) を呼び出すことを検討してください。
requiredType - Bean が一致する必要があると入力します。ジェネリクス型宣言にすることができます ObjectProvider.iterator(), ObjectProvider.stream(), ObjectProvider.orderedStream()boolean containsBean(StringSE name)
指定された名前がエイリアスの場合、対応する正規の Bean 名に変換されます。
このファクトリが階層的である場合、このファクトリインスタンスで Bean が見つからないかどうかを親ファクトリに問い合わせます。
指定された名前に一致する Bean 定義またはシングルトンインスタンスが見つかった場合、このメソッドは、名前付き Bean 定義がスコープ内で具体的または抽象的、遅延または先行であるかどうかにかかわらず、true を返します。このメソッドからの true 戻り値は、必ずしも getBean(java.lang.String) が同じ名前のインスタンスを取得できることを示しているわけではないことに注意してください。
name - 照会する Bean の名前 boolean isSingleton(StringSE name) throws NoSuchBeanDefinitionException
getBean(java.lang.String) は常に同じインスタンスを返しますか? メモ: false を返すこのメソッドは、独立したインスタンスを明確に示していません。これは、スコープが設定された Bean にも対応している可能性がある非シングルトンインスタンスを示します。isPrototype(java.lang.String) 操作を使用して、独立したインスタンスを明示的にチェックします。
エイリアスを対応する正規の Bean 名に変換します。
このファクトリインスタンスで Bean が見つからないかどうかを親ファクトリに確認します。
name - 照会する Bean の名前 NoSuchBeanDefinitionException - 指定された名前の Bean がない場合 getBean(java.lang.String), isPrototype(java.lang.String)boolean isPrototype(StringSE name) throws NoSuchBeanDefinitionException
getBean(java.lang.String) は常に独立したインスタンスを返しますか? メモ: false を返すこのメソッドは、シングルトンオブジェクトを明確に示していません。これは独立したインスタンスを示し、スコープ付き Bean にも対応する場合があります。isSingleton(java.lang.String) 操作を使用して、共有シングルトンインスタンスを明示的に確認します。
エイリアスを対応する正規の Bean 名に変換します。
このファクトリインスタンスで Bean が見つからないかどうかを親ファクトリに確認します。
name - 照会する Bean の名前 NoSuchBeanDefinitionException - 指定された名前の Bean がない場合 getBean(java.lang.String), isSingleton(java.lang.String)boolean isTypeMatch(StringSE name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException
getBean(java.lang.String) 呼び出しが、指定されたターゲット型に割り当て可能なオブジェクトを返すかどうかを確認します。エイリアスを対応する正規の Bean 名に変換します。
このファクトリインスタンスで Bean が見つからないかどうかを親ファクトリに確認します。
name - 照会する Bean の名前 typeToMatch - 照合する型 (ResolvableType として)true、一致しないかまだ判別できない場合は false NoSuchBeanDefinitionException - 指定された名前の Bean がない場合 getBean(java.lang.String), getType(java.lang.String)boolean isTypeMatch(StringSE name, ClassSE<?> typeToMatch) throws NoSuchBeanDefinitionException
getBean(java.lang.String) 呼び出しが、指定されたターゲット型に割り当て可能なオブジェクトを返すかどうかを確認します。エイリアスを対応する正規の Bean 名に変換します。
このファクトリインスタンスで Bean が見つからないかどうかを親ファクトリに確認します。
name - 照会する Bean の名前 typeToMatch - 照合する型 (Class として)true、一致しないかまだ判別できない場合は false NoSuchBeanDefinitionException - 指定された名前の Bean がない場合 getBean(java.lang.String), getType(java.lang.String)@Nullable ClassSE<?> getType(StringSE name) throws NoSuchBeanDefinitionException
getBean(java.lang.String) が返すオブジェクトの型を決定します。FactoryBean の場合は、FactoryBean.getObjectType() によって公開されている、FactoryBean が作成するオブジェクトの型を返します。これにより、以前に初期化されていない FactoryBean (getType(String, boolean) を参照)が初期化される可能性があります。
エイリアスを対応する正規の Bean 名に変換します。
このファクトリインスタンスで Bean が見つからないかどうかを親ファクトリに確認します。
name - 照会する Bean の名前 null NoSuchBeanDefinitionException - 指定された名前の Bean がない場合 getBean(java.lang.String), isTypeMatch(java.lang.String, org.springframework.core.ResolvableType)@Nullable ClassSE<?> getType(StringSE name, boolean allowFactoryBeanInit) throws NoSuchBeanDefinitionException
getBean(java.lang.String) が返すオブジェクトの型を決定します。FactoryBean の場合は、FactoryBean.getObjectType() によって公開されている、FactoryBean が作成するオブジェクトの型を返します。allowFactoryBeanInit フラグによっては、初期の型情報が利用できない場合、以前に初期化されていない FactoryBean が初期化される可能性があります。
エイリアスを対応する正規の Bean 名に変換します。
このファクトリインスタンスで Bean が見つからないかどうかを親ファクトリに確認します。
name - 照会する Bean の名前 allowFactoryBeanInit - FactoryBean がオブジェクト型を判別する目的でのみ初期化されるかどうか null NoSuchBeanDefinitionException - 指定された名前の Bean がない場合 getBean(java.lang.String), isTypeMatch(java.lang.String, org.springframework.core.ResolvableType)StringSE[] getAliases(StringSE name)
これらのエイリアスはすべて、getBean(java.lang.String) 呼び出しで使用される場合、同じ Bean を指します。
指定された名前がエイリアスの場合、対応する元の Bean 名と他のエイリアス(存在する場合)が返され、元の Bean 名が配列の最初の要素になります。
このファクトリインスタンスで Bean が見つからないかどうかを親ファクトリに確認します。
name - エイリアスをチェックする Bean 名 getBean(java.lang.String)