类 AnnotationConfigWebApplicationContext

java.lang.Object
cn.taketoday.core.io.DefaultResourceLoader
cn.taketoday.context.support.AbstractApplicationContext
cn.taketoday.context.support.AbstractRefreshableApplicationContext
cn.taketoday.context.support.AbstractRefreshableConfigApplicationContext
cn.taketoday.web.servlet.support.AbstractRefreshableWebApplicationContext
cn.taketoday.web.servlet.support.AnnotationConfigWebApplicationContext
所有已实现的接口:
cn.taketoday.beans.factory.Aware, cn.taketoday.beans.factory.BeanFactory, cn.taketoday.beans.factory.BeanNameAware, cn.taketoday.beans.factory.HierarchicalBeanFactory, cn.taketoday.beans.factory.InitializingBean, cn.taketoday.beans.factory.support.BeanDefinitionRegistry, cn.taketoday.beans.factory.support.DependencyInjectorProvider, cn.taketoday.context.AnnotationConfigRegistry, cn.taketoday.context.ApplicationContext, cn.taketoday.context.ApplicationEventPublisher, cn.taketoday.context.ConfigurableApplicationContext, cn.taketoday.context.Lifecycle, cn.taketoday.context.MessageSource, cn.taketoday.core.AliasRegistry, cn.taketoday.core.env.EnvironmentCapable, cn.taketoday.core.io.PatternResourceLoader, cn.taketoday.core.io.ResourceLoader, ConfigurableWebApplicationContext, WebApplicationContext, Closeable, AutoCloseable

public class AnnotationConfigWebApplicationContext extends AbstractRefreshableWebApplicationContext implements cn.taketoday.context.AnnotationConfigRegistry
WebApplicationContext implementation which accepts component classes as input — in particular @Configuration classes, but also plain @Component classes as well as JSR-330 compliant classes using jakarta.inject annotations.

Allows for registering classes one by one (specifying class names as config locations) as well as via classpath scanning (specifying base packages as config locations).

This is essentially the equivalent of AnnotationConfigApplicationContext for a web environment. However, in contrast to AnnotationConfigApplicationContext, this class does not extend GenericApplicationContext and therefore does not provide some of the convenient registerBean(...) methods available in a GenericApplicationContext. If you wish to register annotated component classes with a GenericApplicationContext in a web environment, you may use a GenericWebApplicationContext with an AnnotatedBeanDefinitionReader. See the Javadoc for GenericWebApplicationContext for details and an example.

To make use of this application context, the "contextClass" context-param for ContextLoader and/or "contextClass" init-param for FrameworkServlet must be set to the fully-qualified name of this class.

As an alternative to setting the "contextConfigLocation" parameter, users may implement an ApplicationContextInitializer and set the "contextInitializerClasses" context-param / init-param. In such cases, users should favor the AbstractApplicationContext.refresh() and scan(String...) methods over the AbstractRefreshableConfigApplicationContext.setConfigLocation(String) method, which is primarily for use by ContextLoader.

Note: In case of multiple @Configuration classes, later @Bean definitions will override ones defined in earlier loaded files. This can be leveraged to deliberately override certain bean definitions via an extra @Configuration class.

从以下版本开始:
4.0 2022/2/20 17:55
作者:
Chris Beams, Juergen Hoeller, Sam Brannen, Harry Yang
另请参阅:
  • 嵌套类概要

    从类继承的嵌套类/接口 cn.taketoday.core.io.DefaultResourceLoader

    cn.taketoday.core.io.DefaultResourceLoader.ClassPathContextResource

    从接口继承的嵌套类/接口 cn.taketoday.context.ApplicationContext

    cn.taketoday.context.ApplicationContext.State
  • 字段概要

    字段
    修饰符和类型
    字段
    说明
    private final Set<String>
     
    private cn.taketoday.beans.factory.support.BeanNameGenerator
     
    private final Set<Class<?>>
     
    private cn.taketoday.context.annotation.ScopeMetadataResolver
     

    从类继承的字段 cn.taketoday.context.support.AbstractApplicationContext

    APPLICATION_EVENT_MULTICASTER_BEAN_NAME, LIFECYCLE_PROCESSOR_BEAN_NAME, log, MESSAGE_SOURCE_BEAN_NAME

    从接口继承的字段 cn.taketoday.context.ApplicationContext

    APPLICATION_NAME

    从接口继承的字段 cn.taketoday.beans.factory.BeanFactory

    FACTORY_BEAN_PREFIX

    从接口继承的字段 cn.taketoday.context.ConfigurableApplicationContext

    CONFIG_LOCATION_DELIMITERS, CONVERSION_SERVICE_BEAN_NAME, LOAD_TIME_WEAVER_BEAN_NAME, SHUTDOWN_HOOK_THREAD_NAME

    从接口继承的字段 cn.taketoday.web.servlet.ConfigurableWebApplicationContext

    SERVLET_CONFIG_BEAN_NAME

    从接口继承的字段 cn.taketoday.core.io.PatternResourceLoader

    CLASSPATH_ALL_URL_PREFIX

    从接口继承的字段 cn.taketoday.core.io.ResourceLoader

    CLASSPATH_URL_PREFIX
  • 构造器概要

    构造器
  • 方法概要

    修饰符和类型
    方法
    说明
    protected cn.taketoday.context.annotation.AnnotatedBeanDefinitionReader
    getAnnotatedBeanDefinitionReader(cn.taketoday.beans.factory.support.StandardBeanFactory beanFactory)
    Build an AnnotatedBeanDefinitionReader for the given bean factory.
    protected cn.taketoday.beans.factory.support.BeanNameGenerator
    Return the custom BeanNameGenerator for use with AnnotatedBeanDefinitionReader and/or ClassPathBeanDefinitionScanner, if any.
    protected cn.taketoday.context.annotation.ClassPathBeanDefinitionScanner
    getClassPathBeanDefinitionScanner(cn.taketoday.beans.factory.support.StandardBeanFactory beanFactory)
    Build a ClassPathBeanDefinitionScanner for the given bean factory.
    protected cn.taketoday.context.annotation.ScopeMetadataResolver
    Return the custom ScopeMetadataResolver for use with AnnotatedBeanDefinitionReader and/or ClassPathBeanDefinitionScanner, if any.
    protected void
    loadBeanDefinitions(cn.taketoday.beans.factory.support.StandardBeanFactory beanFactory)
    Register a BeanDefinition for any classes specified by register(Class...) and scan any packages specified by scan(String...).
    void
    register(Class<?>... componentClasses)
    Register one or more component classes to be processed.
    void
    scan(String... basePackages)
    Perform a scan within the specified base packages.
    void
    setBeanNameGenerator(cn.taketoday.beans.factory.support.BeanNameGenerator beanNameGenerator)
    Set a custom BeanNameGenerator for use with AnnotatedBeanDefinitionReader and/or ClassPathBeanDefinitionScanner.
    void
    setScopeMetadataResolver(cn.taketoday.context.annotation.ScopeMetadataResolver scopeMetadataResolver)
    Set a custom ScopeMetadataResolver for use with AnnotatedBeanDefinitionReader and/or ClassPathBeanDefinitionScanner.

    从类继承的方法 cn.taketoday.context.support.AbstractRefreshableConfigApplicationContext

    afterPropertiesSet, getDefaultConfigLocations, resolvePath, setBeanName, setConfigLocation, setConfigLocations, setId

    从类继承的方法 cn.taketoday.context.support.AbstractRefreshableApplicationContext

    assertBeanFactoryActive, cancelRefresh, closeBeanFactory, containsBeanDefinition, containsBeanDefinition, containsBeanDefinition, containsBeanDefinition, createBeanFactory, createBootstrapContext, customizeBeanFactory, getAliasList, getBeanDefinition, getBeanDefinition, getBeanDefinitionCount, getBeanDefinitionNames, getBeanFactory, hasBeanFactory, isAlias, isAllowBeanDefinitionOverriding, isBeanDefinitionOverridable, isBeanNameInUse, refreshBeanFactory, registerAlias, registerBeanDefinition, removeAlias, removeBeanDefinition, setAllowBeanDefinitionOverriding, setAllowCircularReferences

    从类继承的方法 cn.taketoday.context.support.AbstractApplicationContext

    addApplicationListener, addBeanFactoryPostProcessor, applyState, close, containsBean, containsLocalBean, destroyBeans, doClose, findAllAnnotationsOnBean, findAnnotationOnBean, findAnnotationOnBean, findSynthesizedAnnotation, finishBeanFactoryInitialization, finishRefresh, formatStartupDate, getAliases, getAnnotatedBeans, getApplicationEventMulticaster, getApplicationListeners, getAutowireCapableBeanFactory, getBean, getBean, getBean, getBean, getBean, getBeanNamesForAnnotation, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanProvider, getBeanProvider, getBeanProvider, getBeanProvider, getBeans, getBeansOfType, getBeansOfType, getBeansOfType, getBeansWithAnnotation, getBeansWithAnnotation, getBootstrapContext, getDisplayName, getEnvironment, getExpressionEvaluator, getId, getInjector, getInternalParentBeanFactory, getInternalParentMessageSource, getLifecycleProcessor, getMessage, getMessage, getMessage, getParent, getParentBeanFactory, getResources, getStartupDate, getState, getType, getType, hasStarted, initApplicationEventMulticaster, initLifecycleProcessor, initMessageSource, invokeBeanFactoryPostProcessors, isActive, isPrototype, isRunning, isSingleton, isTypeMatch, isTypeMatch, obtainFreshBeanFactory, onClose, onRefresh, prepareBeanFactory, prepareRefresh, publishEvent, publishEvent, publishEvent, refresh, registerApplicationListeners, registerBeanPostProcessors, registerFrameworkComponents, registerShutdownHook, removeApplicationListener, resetCommonCaches, scan, setBootstrapContext, setDisplayName, setEnvironment, setParent, start, stop, toString, unwrapFactory

    从类继承的方法 cn.taketoday.core.io.DefaultResourceLoader

    addProtocolResolver, clearResourceCaches, getClassLoader, getProtocolResolvers, getResource, getResourceCache, setClassLoader

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

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

    从接口继承的方法 cn.taketoday.core.AliasRegistry

    getAliases

    从接口继承的方法 cn.taketoday.context.ApplicationContext

    getAutowireCapableBeanFactory, getDisplayName, getExpressionEvaluator, getId, getParent, getStartupDate, getState, hasStarted, unwrapFactory

    从接口继承的方法 cn.taketoday.context.ApplicationEventPublisher

    publishEvent, publishEvent

    从接口继承的方法 cn.taketoday.beans.factory.BeanFactory

    containsBean, containsBeanDefinition, findAllAnnotationsOnBean, findAnnotationOnBean, findAnnotationOnBean, findSynthesizedAnnotation, getAliases, getAnnotatedBeans, getBean, getBean, getBean, getBean, getBean, getBeanDefinition, getBeanDefinitionCount, getBeanDefinitionNames, getBeanNamesForAnnotation, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanNamesForType, getBeanProvider, getBeanProvider, getBeanProvider, getBeanProvider, getBeans, getBeansOfType, getBeansOfType, getBeansOfType, getBeansWithAnnotation, getBeansWithAnnotation, getType, getType, isPrototype, isSingleton, isTypeMatch, isTypeMatch, unwrap

    从接口继承的方法 cn.taketoday.context.ConfigurableApplicationContext

    addApplicationListener, addBeanFactoryPostProcessor, addProtocolResolver, close, getBeanFactory, getBootstrapContext, getEnvironment, isActive, refresh, registerShutdownHook, removeApplicationListener, setClassLoader, setEnvironment, setId, setParent

    从接口继承的方法 cn.taketoday.web.servlet.ConfigurableWebApplicationContext

    setConfigLocation, setConfigLocations

    从接口继承的方法 cn.taketoday.beans.factory.support.DependencyInjectorProvider

    getInjector

    从接口继承的方法 cn.taketoday.beans.factory.HierarchicalBeanFactory

    containsLocalBean, getParentBeanFactory

    从接口继承的方法 cn.taketoday.context.Lifecycle

    isRunning, start, stop

    从接口继承的方法 cn.taketoday.context.MessageSource

    getMessage, getMessage, getMessage

    从接口继承的方法 cn.taketoday.core.io.PatternResourceLoader

    getResources, getResourcesArray, scan

    从接口继承的方法 cn.taketoday.core.io.ResourceLoader

    getClassLoader, getResource
  • 字段详细资料

    • beanNameGenerator

      @Nullable private cn.taketoday.beans.factory.support.BeanNameGenerator beanNameGenerator
    • scopeMetadataResolver

      @Nullable private cn.taketoday.context.annotation.ScopeMetadataResolver scopeMetadataResolver
    • componentClasses

      private final Set<Class<?>> componentClasses
    • basePackages

      private final Set<String> basePackages
  • 构造器详细资料

    • AnnotationConfigWebApplicationContext

      public AnnotationConfigWebApplicationContext()
  • 方法详细资料

    • setBeanNameGenerator

      public void setBeanNameGenerator(@Nullable cn.taketoday.beans.factory.support.BeanNameGenerator beanNameGenerator)
      Set a custom BeanNameGenerator for use with AnnotatedBeanDefinitionReader and/or ClassPathBeanDefinitionScanner.

      Default is AnnotationBeanNameGenerator.

      另请参阅:
      • AnnotatedBeanDefinitionReader.setBeanNameGenerator(BeanNameGenerator)
      • ClassPathBeanDefinitionScanner.setBeanNameGenerator(BeanNameGenerator)
      • BootstrapContext.setBeanNameGenerator(BeanNameGenerator)
    • getBeanNameGenerator

      @Nullable protected cn.taketoday.beans.factory.support.BeanNameGenerator getBeanNameGenerator()
      Return the custom BeanNameGenerator for use with AnnotatedBeanDefinitionReader and/or ClassPathBeanDefinitionScanner, if any.
    • setScopeMetadataResolver

      public void setScopeMetadataResolver(@Nullable cn.taketoday.context.annotation.ScopeMetadataResolver scopeMetadataResolver)
      Set a custom ScopeMetadataResolver for use with AnnotatedBeanDefinitionReader and/or ClassPathBeanDefinitionScanner.

      Default is an AnnotationScopeMetadataResolver.

      另请参阅:
      • AnnotatedBeanDefinitionReader.setScopeMetadataResolver(cn.taketoday.context.annotation.ScopeMetadataResolver)
      • ClassPathBeanDefinitionScanner.setScopeMetadataResolver(cn.taketoday.context.annotation.ScopeMetadataResolver)
    • getScopeMetadataResolver

      @Nullable protected cn.taketoday.context.annotation.ScopeMetadataResolver getScopeMetadataResolver()
      Return the custom ScopeMetadataResolver for use with AnnotatedBeanDefinitionReader and/or ClassPathBeanDefinitionScanner, if any.
    • register

      public void register(Class<?>... componentClasses)
      Register one or more component classes to be processed.

      Note that AbstractApplicationContext.refresh() must be called in order for the context to fully process the new classes.

      指定者:
      register 在接口中 cn.taketoday.context.AnnotationConfigRegistry
      参数:
      componentClasses - one or more component classes, e.g. @Configuration classes
      另请参阅:
    • scan

      public void scan(String... basePackages)
      Perform a scan within the specified base packages.

      Note that AbstractApplicationContext.refresh() must be called in order for the context to fully process the new classes.

      指定者:
      scan 在接口中 cn.taketoday.context.AnnotationConfigRegistry
      参数:
      basePackages - the packages to check for component classes
      另请参阅:
    • loadBeanDefinitions

      protected void loadBeanDefinitions(cn.taketoday.beans.factory.support.StandardBeanFactory beanFactory)
      Register a BeanDefinition for any classes specified by register(Class...) and scan any packages specified by scan(String...).

      For any values specified by AbstractRefreshableConfigApplicationContext.setConfigLocation(String) or AbstractRefreshableConfigApplicationContext.setConfigLocations(String[]), attempt first to load each location as a class, registering a BeanDefinition if class loading is successful, and if class loading fails (i.e. a ClassNotFoundException is raised), assume the value is a package and attempt to scan it for component classes.

      Enables the default set of annotation configuration post processors, such that @Autowired, @Required, and associated annotations can be used.

      Configuration class bean definitions are registered with generated bean definition names unless the value attribute is provided to the stereotype annotation.

      指定者:
      loadBeanDefinitions 在类中 cn.taketoday.context.support.AbstractRefreshableApplicationContext
      参数:
      beanFactory - the bean factory to load bean definitions into
      另请参阅:
      • register(Class...)
      • scan(String...)
      • AbstractRefreshableConfigApplicationContext.setConfigLocation(String)
      • AbstractRefreshableConfigApplicationContext.setConfigLocations(String[])
      • AnnotatedBeanDefinitionReader
      • ClassPathBeanDefinitionScanner
    • getAnnotatedBeanDefinitionReader

      protected cn.taketoday.context.annotation.AnnotatedBeanDefinitionReader getAnnotatedBeanDefinitionReader(cn.taketoday.beans.factory.support.StandardBeanFactory beanFactory)
      Build an AnnotatedBeanDefinitionReader for the given bean factory.

      This should be pre-configured with the Environment (if desired) but not with a BeanNameGenerator or ScopeMetadataResolver yet.

      参数:
      beanFactory - the bean factory to load bean definitions into
      另请参阅:
    • getClassPathBeanDefinitionScanner

      protected cn.taketoday.context.annotation.ClassPathBeanDefinitionScanner getClassPathBeanDefinitionScanner(cn.taketoday.beans.factory.support.StandardBeanFactory beanFactory)
      Build a ClassPathBeanDefinitionScanner for the given bean factory.

      This should be pre-configured with the Environment (if desired) but not with a BeanNameGenerator or ScopeMetadataResolver yet.

      参数:
      beanFactory - the bean factory to load bean definitions into
      另请参阅: