クラス GenericApplicationContext

実装されたすべてのインターフェース:
CloseableSEAutoCloseableSEBeanFactoryHierarchicalBeanFactoryListableBeanFactoryBeanDefinitionRegistryApplicationContextApplicationEventPublisherConfigurableApplicationContextLifecycleMessageSourceAliasRegistryEnvironmentCapableResourceLoaderResourcePatternResolver
既知の直属サブクラス
AnnotationConfigApplicationContextGenericGroovyApplicationContextGenericWebApplicationContextGenericXmlApplicationContextStaticApplicationContext

public class GenericApplicationContext extends AbstractApplicationContext implements BeanDefinitionRegistry
単一の内部 DefaultListableBeanFactory インスタンスを保持し、特定の Bean 定義フォーマットを想定しない汎用 ApplicationContext 実装。Bean 定義リーダーを適用できるようにするために、BeanDefinitionRegistry インターフェースを実装します。

一般的な使用箇所は、BeanDefinitionRegistry インターフェースを介してさまざまな Bean 定義を登録し、AbstractApplicationContext.refresh() を呼び出して、アプリケーションコンテキストセマンティクス(ApplicationContextAware の処理、BeanFactoryPostProcessors の自動検出など)でそれらの Bean を初期化することです。

リフレッシュごとに新しい内部 BeanFactory インスタンスを作成する他の ApplicationContext 実装とは対照的に、このコンテキストの内部 BeanFactory は、その上で Bean 定義を登録できるように、最初から利用可能です。AbstractApplicationContext.refresh() は一度しか呼び出せません。

この ApplicationContext 実装は、通常の AbstractApplicationContext.refresh() の代わりに refreshForAotProcessing(org.springframework.aot.hint.RuntimeHints) を使用して、事前処理に適しています。

使用例:

 GenericApplicationContext ctx = new GenericApplicationContext();
 XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(ctx);
 xmlReader.loadBeanDefinitions(new ClassPathResource("applicationContext.xml"));
 PropertiesBeanDefinitionReader propReader = new PropertiesBeanDefinitionReader(ctx);
 propReader.loadBeanDefinitions(new ClassPathResource("otherBeans.properties"));
 ctx.refresh();

 MyBean myBean = (MyBean) ctx.getBean("myBean");
 ...
XML Bean 定義の典型的なケースでは、設定が簡単な ClassPathXmlApplicationContext または FileSystemXmlApplicationContext を使用することもできますが、任意の Bean 定義形式を混在させるのではなく、XML Bean 定義に標準のリソースの場所を使用できるため、柔軟性は低くなります。リフレッシュ可能な方法で特定の Bean 定義形式を読み取ることになっているカスタムアプリケーションコンテキストの実装については、AbstractRefreshableApplicationContext 基本クラスから派生させることを検討してください。
導入:
1.1.2
作成者:
Juergen Hoeller, Chris Beams, Stephane Nicoll, Sam Brannen
関連事項:
  • コンストラクターの詳細

  • メソッドの詳細

    • setParent

      public void setParent(@Nullable ApplicationContext parent)
      このアプリケーションコンテキストの親を設定し、それに応じて内部 BeanFactory の親も設定します。
      次で指定:
      インターフェース ConfigurableApplicationContextsetParent 
      オーバーライド:
      クラス AbstractApplicationContextsetParent 
      パラメーター:
      parent - 親コンテキスト
      関連事項:
    • setApplicationStartup

      public void setApplicationStartup(ApplicationStartup applicationStartup)
      インターフェースからコピーされた説明: ConfigurableApplicationContext
      このアプリケーションコンテキストに ApplicationStartup を設定します。

      これにより、アプリケーションコンテキストは起動時にメトリクスを記録できます。

      次で指定:
      インターフェース ConfigurableApplicationContextsetApplicationStartup 
      オーバーライド:
      クラス AbstractApplicationContextsetApplicationStartup 
      パラメーター:
      applicationStartup - 新しいコンテキストイベントファクトリ
    • setAllowBeanDefinitionOverriding

      public void setAllowBeanDefinitionOverriding(boolean allowBeanDefinitionOverriding)
      同じ名前で別の定義を登録し、前者を自動的に置き換えることにより、Bean 定義のオーバーライドを許可するかどうかを設定します。そうでない場合は、例外がスローされます。デフォルトは "true" です。
      導入:
      3.0
      関連事項:
    • setAllowCircularReferences

      public void setAllowCircularReferences(boolean allowCircularReferences)
      Bean 間の循環参照を許可するかどうかを設定し、自動的に解決しようとします。

      デフォルトは "true" です。これをオフにすると、循環参照が発生したときに例外がスローされ、完全に許可されなくなります。

      導入:
      3.0
      関連事項:
    • setResourceLoader

      public void setResourceLoader(ResourceLoader resourceLoader)
      このコンテキストで使用する ResourceLoader を設定します。設定されている場合、コンテキストはすべての getResource 呼び出しを指定された ResourceLoader に委譲します。設定されていない場合、デフォルトのリソース読み込みが適用されます。

      カスタム ResourceLoader を指定する主な理由は、特定のメソッドでリソースパス(URL 接頭辞なし)を解決するためです。デフォルトの動作では、クラスパスの場所などのパスを解決します。リソースパスをファイルシステムの場所として解決するには、ここで FileSystemResourceLoader を指定します。

      完全な ResourcePatternResolver を渡すこともできます。これはコンテキストによって自動検出され、getResources 呼び出しにも使用されます。そうでない場合は、デフォルトのリソースパターンマッチングが適用されます。

      関連事項:
    • getResource

      public Resource getResource(StringSE location)
      この実装は、設定されている場合はこのコンテキストの ResourceLoader に委譲し、そうでない場合はデフォルトのスーパークラスの動作にフォールバックします。

      Spring Framework 5.3.22 の時点で、このメソッドは、カスタム ResourceLoader が設定されている場合、登録されたプロトコルリゾルバーも尊重します。

      次で指定:
      インターフェース ResourceLoadergetResource 
      オーバーライド:
      クラス DefaultResourceLoadergetResource 
      パラメーター:
      location - リソースの場所
      戻り値:
      対応する Resource ハンドル (非 null)
      関連事項:
    • getResources

      public Resource[] getResources(StringSE locationPattern) throws IOExceptionSE
      この実装は、ResourcePatternResolver インターフェースを実装している場合は、このコンテキストの ResourceLoader に委譲し、そうでない場合は、デフォルトのスーパークラスの動作にフォールバックします。
      次で指定:
      インターフェース ResourcePatternResolvergetResources 
      オーバーライド:
      クラス AbstractApplicationContextgetResources 
      パラメーター:
      locationPattern - 解決する位置パターン
      戻り値:
      対応する Resource オブジェクト
      例外:
      IOExceptionSE - I/O エラーの場合
      関連事項:
    • setClassLoader

      public void setClassLoader(@Nullable ClassLoaderSE classLoader)
      クラスからコピーされた説明: DefaultResourceLoader
      クラスパスリソースをロードする ClassLoader、または実際のリソースアクセス時にスレッドコンテキストクラスローダーを使用するための null を指定します。

      デフォルトでは、ClassLoader アクセスは、実際のリソースアクセス時にスレッドコンテキストクラスローダーを使用して行われます(5.3 以降)。

      次で指定:
      インターフェース ConfigurableApplicationContextsetClassLoader 
      オーバーライド:
      クラス DefaultResourceLoadersetClassLoader 
      関連事項:
    • getClassLoader

      @Nullable public ClassLoaderSE getClassLoader()
      クラスからコピーされた説明: DefaultResourceLoader
      クラスパスリソースをロードする ClassLoader を返します。

      このリソースローダーによって作成されたすべての ClassPathResource オブジェクトの ClassPathResource のコンストラクターに渡されます。

      次で指定:
      インターフェース ResourceLoadergetClassLoader 
      オーバーライド:
      クラス DefaultResourceLoadergetClassLoader 
      戻り値:
      ClassLoader (システム ClassLoader にさえアクセスできない場合は、null のみ)
      関連事項:
    • refreshBeanFactory

      protected final void refreshBeanFactory() throws IllegalStateExceptionSE
      何もしない: 単一の内部 BeanFactory を保持し、public メソッド(または BeanFactory's)を通じて Bean を登録するために呼び出し元に依存しています。
      次で指定:
      クラス AbstractApplicationContextrefreshBeanFactory 
      例外:
      IllegalStateExceptionSE - すでに初期化されていて、複数回のリフレッシュ試行がサポートされていない場合
      関連事項:
    • cancelRefresh

      protected void cancelRefresh(ThrowableSE ex)
      クラスからコピーされた説明: AbstractApplicationContext
      このコンテキストのリフレッシュ試行をキャンセルし、例外がスローされた後に active フラグをリセットします。
      オーバーライド:
      クラス AbstractApplicationContextcancelRefresh 
      パラメーター:
      ex - キャンセルに至った例外
    • closeBeanFactory

      protected final void closeBeanFactory()
      やることはあまりない: リリースされない単一の内部 BeanFactory を保持しています。
      次で指定:
      クラス AbstractApplicationContextcloseBeanFactory 
    • getBeanFactory

      public final ConfigurableListableBeanFactory getBeanFactory()
      このコンテキストが保持する単一の内部 BeanFactory を(ConfigurableListableBeanFactory として)返します。
      次で指定:
      インターフェース ConfigurableApplicationContextgetBeanFactory 
      次で指定:
      クラス AbstractApplicationContextgetBeanFactory 
      戻り値:
      このアプリケーションコンテキストの内部 Bean ファクトリ (非 null)
      関連事項:
    • getDefaultListableBeanFactory

      public final DefaultListableBeanFactory getDefaultListableBeanFactory()
      Bean 定義の登録に使用できる、このコンテキストの基になる Bean ファクトリを返します。

      注意 : Bean ファクトリとそれに含まれる Bean をアプリケーションコンテキストセマンティクス(BeanFactoryPostProcessors の自動検出など)で初期化するには、AbstractApplicationContext.refresh() を呼び出す必要があります。

      戻り値:
      内部 Bean ファクトリ (DefaultListableBeanFactory として)
    • getAutowireCapableBeanFactory

      public AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateExceptionSE
      クラスからコピーされた説明: AbstractApplicationContext
      すでに利用可能な場合、このコンテキストの内部 Bean ファクトリを AutowireCapableBeanFactory として返します。
      次で指定:
      インターフェース ApplicationContextgetAutowireCapableBeanFactory 
      オーバーライド:
      クラス AbstractApplicationContextgetAutowireCapableBeanFactory 
      戻り値:
      このコンテキストの AutowireCapableBeanFactory
      例外:
      IllegalStateExceptionSE - コンテキストが AutowireCapableBeanFactory インターフェースをサポートしていない場合、またはオートワイヤー可能な Bean ファクトリをまだ保持していない場合(たとえば、refresh() が呼び出されたことがない場合)、コンテキストがすでに閉じられている場合
      関連事項:
    • registerBeanDefinition

      public void registerBeanDefinition(StringSE beanName, BeanDefinition beanDefinition) throws BeanDefinitionStoreException
      インターフェースからコピーされた説明: BeanDefinitionRegistry
      このレジストリに新しい Bean 定義を登録します。RootBeanDefinition および ChildBeanDefinition をサポートする必要があります。
      次で指定:
      インターフェース BeanDefinitionRegistryregisterBeanDefinition 
      パラメーター:
      beanName - 登録する Bean インスタンスの名前
      beanDefinition - 登録する Bean インスタンスの定義
      例外:
      BeanDefinitionStoreException - BeanDefinition が無効な場合
      BeanDefinitionOverrideException - 指定された Bean 名の BeanDefinition がすでに存在し、それをオーバーライドすることが許可されていない場合
      関連事項:
    • removeBeanDefinition

      public void removeBeanDefinition(StringSE beanName) throws NoSuchBeanDefinitionException
      インターフェースからコピーされた説明: BeanDefinitionRegistry
      指定された名前の BeanDefinition を削除します。
      次で指定:
      インターフェース BeanDefinitionRegistryremoveBeanDefinition 
      パラメーター:
      beanName - 登録する Bean インスタンスの名前
      例外:
      NoSuchBeanDefinitionException - そのような Bean 定義がない場合
    • getBeanDefinition

      public BeanDefinition getBeanDefinition(StringSE beanName) throws NoSuchBeanDefinitionException
      インターフェースからコピーされた説明: BeanDefinitionRegistry
      指定された Bean 名の BeanDefinition を返します。
      次で指定:
      インターフェース BeanDefinitionRegistrygetBeanDefinition 
      パラメーター:
      beanName - 定義を検索する Bean の名前
      戻り値:
      指定された名前の BeanDefinition (非 null)
      例外:
      NoSuchBeanDefinitionException - そのような Bean 定義がない場合
    • isBeanDefinitionOverridable

      public boolean isBeanDefinitionOverridable(StringSE beanName)
      インターフェースからコピーされた説明: BeanDefinitionRegistry
      指定された名前の Bean 定義がオーバーライド可能かどうか、つまり、BeanDefinitionRegistry.registerBeanDefinition(java.lang.String, org.springframework.beans.factory.config.BeanDefinition) が同じ名前の既存の定義に対して正常に返されるかどうかを判断します。

      デフォルトの実装は true を返します。

      次で指定:
      インターフェース BeanDefinitionRegistryisBeanDefinitionOverridable 
      パラメーター:
      beanName - チェックする名前
      戻り値:
      指定された Bean 名の定義がオーバーライド可能かどうか
    • isBeanNameInUse

      public boolean isBeanNameInUse(StringSE beanName)
      インターフェースからコピーされた説明: BeanDefinitionRegistry
      指定された Bean 名がこのレジストリ内ですでに使用されているかどうか、つまり、この名前でローカル Bean またはエイリアスが登録されているかどうかを確認します。
      次で指定:
      インターフェース BeanDefinitionRegistryisBeanNameInUse 
      パラメーター:
      beanName - チェックする名前
      戻り値:
      指定された Bean 名がすでに使用されているかどうか
    • registerAlias

      public void registerAlias(StringSE beanName, StringSE alias)
      インターフェースからコピーされた説明: AliasRegistry
      名前を指定して、そのエイリアスを登録します。
      次で指定:
      インターフェース AliasRegistryregisterAlias 
      パラメーター:
      beanName - 正規名
      alias - 登録されるエイリアス
    • removeAlias

      public void removeAlias(StringSE alias)
      インターフェースからコピーされた説明: AliasRegistry
      このレジストリから指定されたエイリアスを削除します。
      次で指定:
      インターフェース AliasRegistryremoveAlias 
      パラメーター:
      alias - 削除するエイリアス
    • isAlias

      public boolean isAlias(StringSE beanName)
      インターフェースからコピーされた説明: AliasRegistry
      指定された名前がエイリアスとして定義されているかどうかを確認します(実際に登録されたコンポーネントの名前ではなく)。
      次で指定:
      インターフェース AliasRegistryisAlias 
      パラメーター:
      beanName - チェックする名前
      戻り値:
      与えられた名前がエイリアスかどうか
    • refreshForAotProcessing

      public void refreshForAotProcessing(RuntimeHints runtimeHints)
      基盤となる Bean ファクトリが Bean インスタンスを作成する準備が整うまで、構成の永続的な表現をロードまたはリフレッシュします。

      AbstractApplicationContext.refresh() のこのバリアントは、通常はビルド時にアプリケーションコンテキストを最適化する Ahead of Time (AOT) 処理によって使用されます。

      このモードでは、BeanDefinitionRegistryPostProcessorMergedBeanDefinitionPostProcessor のみが呼び出されます。

      パラメーター:
      runtimeHints - 実行時のヒント
      例外:
      BeansException - Bean ファクトリを初期化できなかった場合
      IllegalStateExceptionSE - すでに初期化されていて、複数回のリフレッシュ試行がサポートされていない場合
      導入:
      6.0
    • registerBean

      public <T> void registerBean(ClassSE<T> beanClass, ObjectSE... constructorArgs)
      指定された Bean クラスから Bean を登録し、オプションでオートワイヤープロセスでの考慮のために明示的なコンストラクター引数を提供します。
      パラメーター:
      beanClass - Bean のクラス
      constructorArgs - Spring のコンストラクター解決アルゴリズムにフィードされるカスタム引数値。すべての引数または特定の引数のみを解決し、残りは通常のオートワイヤーによって解決されます (null または空の場合があります)
      導入:
      5.2 (AnnotationConfigApplicationContext サブクラスの 5.0 以降)
    • registerBean

      public <T> void registerBean(@Nullable StringSE beanName, ClassSE<T> beanClass, ObjectSE... constructorArgs)
      指定された Bean クラスから Bean を登録し、オプションでオートワイヤープロセスでの考慮のために明示的なコンストラクター引数を提供します。
      パラメーター:
      beanName - Bean の名前 (null の場合があります)
      beanClass - Bean のクラス
      constructorArgs - Spring のコンストラクター解決アルゴリズムにフィードされるカスタム引数値。すべての引数または特定の引数のみを解決し、残りは通常のオートワイヤーによって解決されます (null または空の場合があります)
      導入:
      5.2 (AnnotationConfigApplicationContext サブクラスの 5.0 以降)
    • registerBean

      public final <T> void registerBean(ClassSE<T> beanClass, BeanDefinitionCustomizer... customizers)
      指定された Bean クラスから Bean を登録し、オプションでその Bean 定義メタデータ(通常はラムダ式として宣言されます)をカスタマイズします。
      パラメーター:
      beanClass - Bean のクラス (自動接続される public コンストラクターを解決します。おそらくデフォルトのコンストラクターだけです)
      customizers - ファクトリの BeanDefinition をカスタマイズするための 1 つ以上のコールバック。lazy-init またはプライマリフラグの設定
      導入:
      5.0
      関連事項:
    • registerBean

      public final <T> void registerBean(@Nullable StringSE beanName, ClassSE<T> beanClass, BeanDefinitionCustomizer... customizers)
      指定された Bean クラスから Bean を登録し、オプションでその Bean 定義メタデータ(通常はラムダ式として宣言されます)をカスタマイズします。
      パラメーター:
      beanName - Bean の名前 (null の場合があります)
      beanClass - Bean のクラス (自動接続される public コンストラクターを解決します。おそらくデフォルトのコンストラクターだけです)
      customizers - ファクトリの BeanDefinition をカスタマイズするための 1 つ以上のコールバック。lazy-init またはプライマリフラグの設定
      導入:
      5.0
      関連事項:
    • registerBean

      public final <T> void registerBean(ClassSE<T> beanClass, SupplierSE<T> supplier, BeanDefinitionCustomizer... customizers)
      新しいインスタンス(通常はラムダ式またはメソッド参照として宣言される)を取得するために指定されたサプライヤーを使用して、指定された Bean クラスから Bean を登録し、オプションでその Bean 定義メタデータをカスタマイズします(再び通常ラムダ式として宣言される)。
      パラメーター:
      beanClass - Bean のクラス
      supplier - Bean のインスタンスを作成するためのコールバック
      customizers - ファクトリの BeanDefinition をカスタマイズするための 1 つ以上のコールバック。lazy-init またはプライマリフラグの設定
      導入:
      5.0
      関連事項:
    • registerBean

      public <T> void registerBean(@Nullable StringSE beanName, ClassSE<T> beanClass, @Nullable SupplierSE<T> supplier, BeanDefinitionCustomizer... customizers)
      新しいインスタンス(通常はラムダ式またはメソッド参照として宣言される)を取得するために指定されたサプライヤーを使用して、指定された Bean クラスから Bean を登録し、オプションでその Bean 定義メタデータをカスタマイズします(再び通常ラムダ式として宣言される)。

      このメソッドをオーバーライドして、すべての registerBean メソッドに登録メカニズムを適合させることができます(これらはすべてこのメソッドに委譲されるため)。

      パラメーター:
      beanName - Bean の名前 (null の場合があります)
      beanClass - Bean のクラス
      supplier - Bean のインスタンスを作成するためのコールバック (null の場合、public コンストラクターを解決して代わりにオートワイヤーする)
      customizers - ファクトリの BeanDefinition をカスタマイズするための 1 つ以上のコールバック。lazy-init またはプライマリフラグの設定
      導入:
      5.0