org.springframework.context.support

## 类 GenericApplicationContext

- java.lang.Object
- - org.springframework.core.io.DefaultResourceLoader
  - - org.springframework.context.support.AbstractApplicationContext
    - - org.springframework.context.support.GenericApplicationContext

- 所有已实现的接口:
    Closeable, AutoCloseable, org.springframework.beans.factory.BeanFactory, org.springframework.beans.factory.HierarchicalBeanFactory, org.springframework.beans.factory.ListableBeanFactory, org.springframework.beans.factory.support.BeanDefinitionRegistry, ApplicationContext, ApplicationEventPublisher, ConfigurableApplicationContext, Lifecycle, MessageSource, org.springframework.core.AliasRegistry, org.springframework.core.env.EnvironmentCapable, org.springframework.core.io.ResourceLoader, org.springframework.core.io.support.ResourcePatternResolver
  直接已知子类:
    AnnotationConfigApplicationContext, GenericGroovyApplicationContext, GenericXmlApplicationContext, StaticApplicationContext

      public class GenericApplicationContext
      extends AbstractApplicationContext
      implements org.springframework.beans.factory.support.BeanDefinitionRegistry

  Generic ApplicationContext implementation that holds a single internal `DefaultListableBeanFactory` instance and does not assume a specific bean definition format. Implements the `BeanDefinitionRegistry` interface in order to allow for applying any bean definition readers to it.

  Typical usage is to register a variety of bean definitions via the `BeanDefinitionRegistry` interface and then call `AbstractApplicationContext.refresh()` to initialize those beans with application context semantics (handling `ApplicationContextAware`, auto-detecting `BeanFactoryPostProcessors`, etc).

  In contrast to other ApplicationContext implementations that create a new internal BeanFactory instance for each refresh, the internal BeanFactory of this context is available right from the start, to be able to register bean definitions on it. `AbstractApplicationContext.refresh()` may only be called once.

  Usage example:

       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");
       ...

  For the typical case of XML bean definitions, simply use `ClassPathXmlApplicationContext` or `FileSystemXmlApplicationContext`, which are easier to set up - but less flexible, since you can just use standard resource locations for XML bean definitions, rather than mixing arbitrary bean definition formats. The equivalent in a web environment is

  For custom application context implementations that are supposed to read special bean definition formats in a refreshable manner, consider deriving from the `AbstractRefreshableApplicationContext` base class.

  从以下版本开始:
    1.1.2
  作者:
    Juergen Hoeller, Chris Beams
  另请参阅:
    `registerBeanDefinition(java.lang.String, org.springframework.beans.factory.config.BeanDefinition)`, `AbstractApplicationContext.refresh()`, `XmlBeanDefinitionReader`, `PropertiesBeanDefinitionReader`

- - ### 嵌套类概要

    - ### 从类继承的嵌套类/接口 org.springframework.core.io.DefaultResourceLoader

      `org.springframework.core.io.DefaultResourceLoader.ClassPathContextResource`

  - ### 字段概要

    - ### 从类继承的字段 org.springframework.context.support.AbstractApplicationContext

      `APPLICATION_EVENT_MULTICASTER_BEAN_NAME, LIFECYCLE_PROCESSOR_BEAN_NAME, logger, MESSAGE_SOURCE_BEAN_NAME`

    - ### 从接口继承的字段 org.springframework.context.ConfigurableApplicationContext

      `CONFIG_LOCATION_DELIMITERS, CONVERSION_SERVICE_BEAN_NAME, ENVIRONMENT_BEAN_NAME, LOAD_TIME_WEAVER_BEAN_NAME, SYSTEM_ENVIRONMENT_BEAN_NAME, SYSTEM_PROPERTIES_BEAN_NAME`

    - ### 从接口继承的字段 org.springframework.beans.factory.BeanFactory

      `FACTORY_BEAN_PREFIX`

    - ### 从接口继承的字段 org.springframework.core.io.support.ResourcePatternResolver

      `CLASSPATH_ALL_URL_PREFIX`

    - ### 从接口继承的字段 org.springframework.core.io.ResourceLoader

      `CLASSPATH_URL_PREFIX`

  - ### 构造器概要

    构造器
    构造器和说明
    `GenericApplicationContext()` Create a new GenericApplicationContext.
    `GenericApplicationContext(ApplicationContext parent)` Create a new GenericApplicationContext with the given parent.
    `GenericApplicationContext(org.springframework.beans.factory.support.DefaultListableBeanFactory beanFactory)` Create a new GenericApplicationContext with the given DefaultListableBeanFactory.
    `GenericApplicationContext(org.springframework.beans.factory.support.DefaultListableBeanFactory beanFactory, ApplicationContext parent)` Create a new GenericApplicationContext with the given DefaultListableBeanFactory.

  - ### 方法概要

    所有方法 实例方法 具体方法
    限定符和类型 | 方法和说明
    --- | ---
    `protected void` | `cancelRefresh(org.springframework.beans.BeansException ex)` Cancel this context's refresh attempt, resetting the `active` flag after an exception got thrown.
    `protected void` | `closeBeanFactory()` Not much to do: We hold a single internal BeanFactory that will never get released.
    `org.springframework.beans.factory.config.AutowireCapableBeanFactory` | `getAutowireCapableBeanFactory()` Return this context's internal bean factory as AutowireCapableBeanFactory, if already available.
    `org.springframework.beans.factory.config.BeanDefinition` | `getBeanDefinition(String beanName)`
    `org.springframework.beans.factory.config.ConfigurableListableBeanFactory` | `getBeanFactory()` Return the single internal BeanFactory held by this context (as ConfigurableListableBeanFactory).
    `ClassLoader` | `getClassLoader()`
    `org.springframework.beans.factory.support.DefaultListableBeanFactory` | `getDefaultListableBeanFactory()` Return the underlying bean factory of this context, available for registering bean definitions.
    `org.springframework.core.io.Resource` | `getResource(String location)` This implementation delegates to this context's ResourceLoader if set, falling back to the default superclass behavior else.
    `org.springframework.core.io.Resource[]` | `getResources(String locationPattern)` This implementation delegates to this context's ResourceLoader if it implements the ResourcePatternResolver interface, falling back to the default superclass behavior else.
    `boolean` | `isAlias(String beanName)`
    `boolean` | `isBeanNameInUse(String beanName)`
    `protected void` | `refreshBeanFactory()` Do nothing: We hold a single internal BeanFactory and rely on callers to register beans through our public methods (or the BeanFactory's).
    `void` | `registerAlias(String beanName, String alias)`
    `<T> void` | `registerBean(Class<T> beanClass, org.springframework.beans.factory.config.BeanDefinitionCustomizer... customizers)` Register a bean from the given bean class, optionally customizing its bean definition metadata (typically declared as a lambda expression).
    `<T> void` | `registerBean(Class<T> beanClass, Supplier<T> supplier, org.springframework.beans.factory.config.BeanDefinitionCustomizer... customizers)` Register a bean from the given bean class, using the given supplier for obtaining a new instance (typically declared as a lambda expression or method reference), optionally customizing its bean definition metadata (again typically declared as a lambda expression).
    `<T> void` | `registerBean(String beanName, Class<T> beanClass, org.springframework.beans.factory.config.BeanDefinitionCustomizer... customizers)` Register a bean from the given bean class, optionally customizing its bean definition metadata (typically declared as a lambda expression).
    `<T> void` | `registerBean(String beanName, Class<T> beanClass, Supplier<T> supplier, org.springframework.beans.factory.config.BeanDefinitionCustomizer... customizers)` Register a bean from the given bean class, using the given supplier for obtaining a new instance (typically declared as a lambda expression or method reference), optionally customizing its bean definition metadata (again typically declared as a lambda expression).
    `void` | `registerBeanDefinition(String beanName, org.springframework.beans.factory.config.BeanDefinition beanDefinition)`
    `void` | `removeAlias(String alias)`
    `void` | `removeBeanDefinition(String beanName)`
    `void` | `setAllowBeanDefinitionOverriding(boolean allowBeanDefinitionOverriding)` Set whether it should be allowed to override bean definitions by registering a different definition with the same name, automatically replacing the former.
    `void` | `setAllowCircularReferences(boolean allowCircularReferences)` Set whether to allow circular references between beans - and automatically try to resolve them.
    `void` | `setClassLoader(ClassLoader classLoader)`
    `void` | `setParent(ApplicationContext parent)` Set the parent of this application context, also setting the parent of the internal BeanFactory accordingly.
    `void` | `setResourceLoader(org.springframework.core.io.ResourceLoader resourceLoader)` Set a ResourceLoader to use for this context.

    - ### 从类继承的方法 org.springframework.context.support.AbstractApplicationContext

      `addApplicationListener, addBeanFactoryPostProcessor, assertBeanFactoryActive, close, containsBean, containsBeanDefinition, containsLocalBean, createEnvironment, destroy, destroyBeans, doClose, findAnnotationOnBean, finishBeanFactoryInitialization, finishRefresh, getAliases, getApplicationListeners, getApplicationName, getBean, getBean, getBean, getBean, getBean, getBeanDefinitionCount, getBeanDefinitionNames, getBeanFactoryPostProcessors, getBeanNamesForAnnotation, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeansOfType, getBeansOfType, getBeansWithAnnotation, getDisplayName, getEnvironment, getId, getInternalParentBeanFactory, getInternalParentMessageSource, getMessage, getMessage, getMessage, getParent, getParentBeanFactory, getResourcePatternResolver, getStartupDate, getType, initApplicationEventMulticaster, initLifecycleProcessor, initMessageSource, initPropertySources, invokeBeanFactoryPostProcessors, isActive, isPrototype, isRunning, isSingleton, isTypeMatch, isTypeMatch, obtainFreshBeanFactory, onClose, onRefresh, postProcessBeanFactory, prepareBeanFactory, prepareRefresh, publishEvent, publishEvent, publishEvent, refresh, registerBeanPostProcessors, registerListeners, registerShutdownHook, resetCommonCaches, setDisplayName, setEnvironment, setId, start, stop, toString`

    - ### 从类继承的方法 org.springframework.core.io.DefaultResourceLoader

      `addProtocolResolver, clearResourceCaches, getProtocolResolvers, getResourceByPath, getResourceCache`

    - ### 从类继承的方法 java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

    - ### 从接口继承的方法 org.springframework.beans.factory.support.BeanDefinitionRegistry

      `containsBeanDefinition, getBeanDefinitionCount, getBeanDefinitionNames`

    - ### 从接口继承的方法 org.springframework.core.AliasRegistry

      `getAliases`

    - ### 从接口继承的方法 org.springframework.context.ConfigurableApplicationContext

      `addProtocolResolver`

- - ### 构造器详细资料

    - #### GenericApplicationContext

          public GenericApplicationContext()

      Create a new GenericApplicationContext.
      另请参阅:
        `registerBeanDefinition(java.lang.String, org.springframework.beans.factory.config.BeanDefinition)`, `AbstractApplicationContext.refresh()`

    - #### GenericApplicationContext

          public GenericApplicationContext(org.springframework.beans.factory.support.DefaultListableBeanFactory beanFactory)

      Create a new GenericApplicationContext with the given DefaultListableBeanFactory.
      参数:
        `beanFactory` - the DefaultListableBeanFactory instance to use for this context
      另请参阅:
        `registerBeanDefinition(java.lang.String, org.springframework.beans.factory.config.BeanDefinition)`, `AbstractApplicationContext.refresh()`

    - #### GenericApplicationContext

          public GenericApplicationContext(@Nullable
                                           ApplicationContext parent)

      Create a new GenericApplicationContext with the given parent.
      参数:
        `parent` - the parent application context
      另请参阅:
        `registerBeanDefinition(java.lang.String, org.springframework.beans.factory.config.BeanDefinition)`, `AbstractApplicationContext.refresh()`

    - #### GenericApplicationContext

          public GenericApplicationContext(org.springframework.beans.factory.support.DefaultListableBeanFactory beanFactory,
                                           ApplicationContext parent)

      Create a new GenericApplicationContext with the given DefaultListableBeanFactory.
      参数:
        `beanFactory` - the DefaultListableBeanFactory instance to use for this context
        `parent` - the parent application context
      另请参阅:
        `registerBeanDefinition(java.lang.String, org.springframework.beans.factory.config.BeanDefinition)`, `AbstractApplicationContext.refresh()`

  - ### 方法详细资料

    - #### setParent

          public void setParent(@Nullable
                                ApplicationContext parent)

      Set the parent of this application context, also setting the parent of the internal BeanFactory accordingly.
      指定者:
        `setParent` 在接口中 `ConfigurableApplicationContext`
      覆盖:
        `setParent` 在类中 `AbstractApplicationContext`
      参数:
        `parent` - the parent context
      另请参阅:
        `ConfigurableBeanFactory.setParentBeanFactory(org.springframework.beans.factory.BeanFactory)`

    - #### setAllowBeanDefinitionOverriding

          public void setAllowBeanDefinitionOverriding(boolean allowBeanDefinitionOverriding)

      Set whether it should be allowed to override bean definitions by registering a different definition with the same name, automatically replacing the former. If not, an exception will be thrown. Default is "true".
      从以下版本开始:
        3.0
      另请参阅:
        `DefaultListableBeanFactory.setAllowBeanDefinitionOverriding(boolean)`

    - #### setAllowCircularReferences

          public void setAllowCircularReferences(boolean allowCircularReferences)

      Set whether to allow circular references between beans - and automatically try to resolve them.

      Default is "true". Turn this off to throw an exception when encountering a circular reference, disallowing them completely.

      从以下版本开始:
        3.0
      另请参阅:
        `AbstractAutowireCapableBeanFactory.setAllowCircularReferences(boolean)`

    - #### setResourceLoader

          public void setResourceLoader(org.springframework.core.io.ResourceLoader resourceLoader)

      Set a ResourceLoader to use for this context. If set, the context will delegate all `getResource` calls to the given ResourceLoader. If not set, default resource loading will apply.

      The main reason to specify a custom ResourceLoader is to resolve resource paths (without URL prefix) in a specific fashion. The default behavior is to resolve such paths as class path locations. To resolve resource paths as file system locations, specify a FileSystemResourceLoader here.

      You can also pass in a full ResourcePatternResolver, which will be autodetected by the context and used for `getResources` calls as well. Else, default resource pattern matching will apply.

      另请参阅:
        `getResource(java.lang.String)`, `DefaultResourceLoader`, `FileSystemResourceLoader`, `ResourcePatternResolver`, `getResources(java.lang.String)`

    - #### getResource

          public org.springframework.core.io.Resource getResource(String location)

      This implementation delegates to this context's ResourceLoader if set, falling back to the default superclass behavior else.
      指定者:
        `getResource` 在接口中 `org.springframework.core.io.ResourceLoader`
      覆盖:
        `getResource` 在类中 `org.springframework.core.io.DefaultResourceLoader`
      另请参阅:
        `setResourceLoader(org.springframework.core.io.ResourceLoader)`

    - #### getResources

          public org.springframework.core.io.Resource[] getResources(String locationPattern)
                                                              throws IOException

      This implementation delegates to this context's ResourceLoader if it implements the ResourcePatternResolver interface, falling back to the default superclass behavior else.
      指定者:
        `getResources` 在接口中 `org.springframework.core.io.support.ResourcePatternResolver`
      覆盖:
        `getResources` 在类中 `AbstractApplicationContext`
      抛出:
        `IOException`
      另请参阅:
        `setResourceLoader(org.springframework.core.io.ResourceLoader)`

    - #### setClassLoader

          public void setClassLoader(@Nullable
                                     ClassLoader classLoader)

      覆盖:
        `setClassLoader` 在类中 `org.springframework.core.io.DefaultResourceLoader`

    - #### getClassLoader

          @Nullable
          public ClassLoader getClassLoader()

      指定者:
        `getClassLoader` 在接口中 `org.springframework.core.io.ResourceLoader`
      覆盖:
        `getClassLoader` 在类中 `org.springframework.core.io.DefaultResourceLoader`

    - #### refreshBeanFactory

          protected final void refreshBeanFactory()
                                           throws IllegalStateException

      Do nothing: We hold a single internal BeanFactory and rely on callers to register beans through our public methods (or the BeanFactory's).
      指定者:
        `refreshBeanFactory` 在类中 `AbstractApplicationContext`
      抛出:
        `IllegalStateException` - if already initialized and multiple refresh attempts are not supported
      另请参阅:
        `registerBeanDefinition(java.lang.String, org.springframework.beans.factory.config.BeanDefinition)`

    - #### cancelRefresh

          protected void cancelRefresh(org.springframework.beans.BeansException ex)

      从类复制的说明: `AbstractApplicationContext`
      Cancel this context's refresh attempt, resetting the `active` flag after an exception got thrown.
      覆盖:
        `cancelRefresh` 在类中 `AbstractApplicationContext`
      参数:
        `ex` - the exception that led to the cancellation

    - #### closeBeanFactory

          protected final void closeBeanFactory()

      Not much to do: We hold a single internal BeanFactory that will never get released.
      指定者:
        `closeBeanFactory` 在类中 `AbstractApplicationContext`

    - #### getBeanFactory

          public final org.springframework.beans.factory.config.ConfigurableListableBeanFactory getBeanFactory()

      Return the single internal BeanFactory held by this context (as ConfigurableListableBeanFactory).
      指定者:
        `getBeanFactory` 在接口中 `ConfigurableApplicationContext`
      指定者:
        `getBeanFactory` 在类中 `AbstractApplicationContext`
      返回:
        this application context's internal bean factory (never `null`)
      另请参阅:
        `AbstractApplicationContext.refreshBeanFactory()`, `AbstractApplicationContext.closeBeanFactory()`

    - #### getDefaultListableBeanFactory

          public final org.springframework.beans.factory.support.DefaultListableBeanFactory getDefaultListableBeanFactory()

      Return the underlying bean factory of this context, available for registering bean definitions.

      NOTE: You need to call `AbstractApplicationContext.refresh()` to initialize the bean factory and its contained beans with application context semantics (autodetecting BeanFactoryPostProcessors, etc).

      返回:
        the internal bean factory (as DefaultListableBeanFactory)

    - #### getAutowireCapableBeanFactory

          public org.springframework.beans.factory.config.AutowireCapableBeanFactory getAutowireCapableBeanFactory()
                                                                                                            throws IllegalStateException

      从类复制的说明: `AbstractApplicationContext`
      Return this context's internal bean factory as AutowireCapableBeanFactory, if already available.
      指定者:
        `getAutowireCapableBeanFactory` 在接口中 `ApplicationContext`
      覆盖:
        `getAutowireCapableBeanFactory` 在类中 `AbstractApplicationContext`
      返回:
        the AutowireCapableBeanFactory for this context
      抛出:
        `IllegalStateException` - if the context does not support the `AutowireCapableBeanFactory` interface, or does not hold an autowire-capable bean factory yet (e.g. if `refresh()` has never been called), or if the context has been closed already
      另请参阅:
        `AbstractApplicationContext.getBeanFactory()`

    - #### registerBeanDefinition

          public void registerBeanDefinition(String beanName,
                                             org.springframework.beans.factory.config.BeanDefinition beanDefinition)
                                      throws org.springframework.beans.factory.BeanDefinitionStoreException

      指定者:
        `registerBeanDefinition` 在接口中 `org.springframework.beans.factory.support.BeanDefinitionRegistry`
      抛出:
        `org.springframework.beans.factory.BeanDefinitionStoreException`

    - #### removeBeanDefinition

          public void removeBeanDefinition(String beanName)
                                    throws org.springframework.beans.factory.NoSuchBeanDefinitionException

      指定者:
        `removeBeanDefinition` 在接口中 `org.springframework.beans.factory.support.BeanDefinitionRegistry`
      抛出:
        `org.springframework.beans.factory.NoSuchBeanDefinitionException`

    - #### getBeanDefinition

          public org.springframework.beans.factory.config.BeanDefinition getBeanDefinition(String beanName)
                                                                                    throws org.springframework.beans.factory.NoSuchBeanDefinitionException

      指定者:
        `getBeanDefinition` 在接口中 `org.springframework.beans.factory.support.BeanDefinitionRegistry`
      抛出:
        `org.springframework.beans.factory.NoSuchBeanDefinitionException`

    - #### isBeanNameInUse

          public boolean isBeanNameInUse(String beanName)

      指定者:
        `isBeanNameInUse` 在接口中 `org.springframework.beans.factory.support.BeanDefinitionRegistry`

    - #### registerAlias

          public void registerAlias(String beanName,
                                    String alias)

      指定者:
        `registerAlias` 在接口中 `org.springframework.core.AliasRegistry`

    - #### removeAlias

          public void removeAlias(String alias)

      指定者:
        `removeAlias` 在接口中 `org.springframework.core.AliasRegistry`

    - #### isAlias

          public boolean isAlias(String beanName)

      指定者:
        `isAlias` 在接口中 `org.springframework.core.AliasRegistry`

    - #### registerBean

          public final <T> void registerBean(Class<T> beanClass,
                                             org.springframework.beans.factory.config.BeanDefinitionCustomizer... customizers)

      Register a bean from the given bean class, optionally customizing its bean definition metadata (typically declared as a lambda expression).
      参数:
        `beanClass` - the class of the bean (resolving a public constructor to be autowired, possibly simply the default constructor)
        `customizers` - one or more callbacks for customizing the factory's `BeanDefinition`, e.g. setting a lazy-init or primary flag
      从以下版本开始:
        5.0
      另请参阅:
        `registerBean(String, Class, Supplier, BeanDefinitionCustomizer...)`

    - #### registerBean

          public final <T> void registerBean(@Nullable
                                             String beanName,
                                             Class<T> beanClass,
                                             org.springframework.beans.factory.config.BeanDefinitionCustomizer... customizers)

      Register a bean from the given bean class, optionally customizing its bean definition metadata (typically declared as a lambda expression).
      参数:
        `beanName` - the name of the bean (may be `null`)
        `beanClass` - the class of the bean (resolving a public constructor to be autowired, possibly simply the default constructor)
        `customizers` - one or more callbacks for customizing the factory's `BeanDefinition`, e.g. setting a lazy-init or primary flag
      从以下版本开始:
        5.0
      另请参阅:
        `registerBean(String, Class, Supplier, BeanDefinitionCustomizer...)`

    - #### registerBean

          public final <T> void registerBean(Class<T> beanClass,
                                             Supplier<T> supplier,
                                             org.springframework.beans.factory.config.BeanDefinitionCustomizer... customizers)

      Register a bean from the given bean class, using the given supplier for obtaining a new instance (typically declared as a lambda expression or method reference), optionally customizing its bean definition metadata (again typically declared as a lambda expression).
      参数:
        `beanClass` - the class of the bean
        `supplier` - a callback for creating an instance of the bean
        `customizers` - one or more callbacks for customizing the factory's `BeanDefinition`, e.g. setting a lazy-init or primary flag
      从以下版本开始:
        5.0
      另请参阅:
        `registerBean(String, Class, Supplier, BeanDefinitionCustomizer...)`

    - #### registerBean

          public <T> void registerBean(@Nullable
                                       String beanName,
                                       Class<T> beanClass,
                                       @Nullable
                                       Supplier<T> supplier,
                                       org.springframework.beans.factory.config.BeanDefinitionCustomizer... customizers)

      Register a bean from the given bean class, using the given supplier for obtaining a new instance (typically declared as a lambda expression or method reference), optionally customizing its bean definition metadata (again typically declared as a lambda expression).

      This method can be overridden to adapt the registration mechanism for all `registerBean` methods (since they all delegate to this one).

      参数:
        `beanName` - the name of the bean (may be `null`)
        `beanClass` - the class of the bean
        `supplier` - a callback for creating an instance of the bean (in case of `null`, resolving a public constructor to be autowired instead)
        `customizers` - one or more callbacks for customizing the factory's `BeanDefinition`, e.g. setting a lazy-init or primary flag
      从以下版本开始:
        5.0