Class ConfigurationClassPostProcessor

java.lang.Object
org.springframework.context.annotation.ConfigurationClassPostProcessor
All Implemented Interfaces:
org.springframework.beans.factory.aot.BeanFactoryInitializationAotProcessor, org.springframework.beans.factory.aot.BeanRegistrationAotProcessor, org.springframework.beans.factory.Aware, org.springframework.beans.factory.BeanClassLoaderAware, org.springframework.beans.factory.config.BeanFactoryPostProcessor, org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor, ApplicationStartupAware, EnvironmentAware, ResourceLoaderAware, org.springframework.core.Ordered, org.springframework.core.PriorityOrdered

public class ConfigurationClassPostProcessor extends Object implements org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor, org.springframework.beans.factory.aot.BeanRegistrationAotProcessor, org.springframework.beans.factory.aot.BeanFactoryInitializationAotProcessor, org.springframework.core.PriorityOrdered, ResourceLoaderAware, ApplicationStartupAware, org.springframework.beans.factory.BeanClassLoaderAware, EnvironmentAware
BeanFactoryPostProcessor used for bootstrapping processing of @Configuration classes.

Registered by default when using <context:annotation-config/> or <context:component-scan/>. Otherwise, may be declared manually as with any other BeanFactoryPostProcessor.

This post processor is priority-ordered as it is important that any @Bean methods declared in @Configuration classes have their corresponding bean definitions registered before any other BeanFactoryPostProcessor executes.

Since:
3.0
Author:
Chris Beams, Juergen Hoeller, Phillip Webb, Sam Brannen
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    A BeanNameGenerator using fully qualified class names as default bean names.

    Fields inherited from interface org.springframework.core.Ordered

    HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    enhanceConfigurationClasses(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
    Post-processes a BeanFactory in search of Configuration class BeanDefinitions; any candidates are then enhanced by a ConfigurationClassEnhancer.
    int
     
    void
    postProcessBeanDefinitionRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry registry)
    Derive further bean definitions from the configuration classes in the registry.
    void
    postProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
    Prepare the Configuration classes for servicing bean requests at runtime by replacing them with CGLIB-enhanced subclasses.
    org.springframework.beans.factory.aot.BeanFactoryInitializationAotContribution
    processAheadOfTime(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
     
    org.springframework.beans.factory.aot.BeanRegistrationAotContribution
    processAheadOfTime(org.springframework.beans.factory.support.RegisteredBean registeredBean)
     
    void
    processConfigBeanDefinitions(org.springframework.beans.factory.support.BeanDefinitionRegistry registry)
    Build and validate a configuration model based on the registry of Configuration classes.
    void
    setApplicationStartup(org.springframework.core.metrics.ApplicationStartup applicationStartup)
    Set the ApplicationStartup that this object runs with.
    void
     
    void
    setBeanNameGenerator(org.springframework.beans.factory.support.BeanNameGenerator beanNameGenerator)
    Set the BeanNameGenerator to be used when triggering component scanning from Configuration classes and when registering Import'ed configuration classes.
    void
    setEnvironment(org.springframework.core.env.Environment environment)
    Set the Environment that this component runs in.
    void
    setMetadataReaderFactory(org.springframework.core.type.classreading.MetadataReaderFactory metadataReaderFactory)
    Set the MetadataReaderFactory to use.
    void
    setProblemReporter(org.springframework.beans.factory.parsing.ProblemReporter problemReporter)
    Set the ProblemReporter to use.
    void
    setResourceLoader(org.springframework.core.io.ResourceLoader resourceLoader)
    Set the ResourceLoader that this object runs in.
    void
    setSourceExtractor(org.springframework.beans.factory.parsing.SourceExtractor sourceExtractor)
    Set the SourceExtractor to use for generated bean definitions that correspond to Bean factory methods.

    Methods inherited from class java.lang.Object

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

    Methods inherited from interface org.springframework.beans.factory.aot.BeanRegistrationAotProcessor

    isBeanExcludedFromAotProcessing
  • Field Details

  • Constructor Details

    • ConfigurationClassPostProcessor

      public ConfigurationClassPostProcessor()
  • Method Details

    • getOrder

      public int getOrder()
      Specified by:
      getOrder in interface org.springframework.core.Ordered
    • setSourceExtractor

      public void setSourceExtractor(@Nullable org.springframework.beans.factory.parsing.SourceExtractor sourceExtractor)
      Set the SourceExtractor to use for generated bean definitions that correspond to Bean factory methods.
    • setProblemReporter

      public void setProblemReporter(@Nullable org.springframework.beans.factory.parsing.ProblemReporter problemReporter)
      Set the ProblemReporter to use.

      Used to register any problems detected with Configuration or Bean declarations. For instance, an @Bean method marked as final is illegal and would be reported as a problem. Defaults to FailFastProblemReporter.

    • setMetadataReaderFactory

      public void setMetadataReaderFactory(org.springframework.core.type.classreading.MetadataReaderFactory metadataReaderFactory)
      Set the MetadataReaderFactory to use.

      Default is a CachingMetadataReaderFactory for the specified bean class loader.

    • setBeanNameGenerator

      public void setBeanNameGenerator(org.springframework.beans.factory.support.BeanNameGenerator beanNameGenerator)
      Set the BeanNameGenerator to be used when triggering component scanning from Configuration classes and when registering Import'ed configuration classes. The default is a standard AnnotationBeanNameGenerator for scanned components (compatible with the default in ClassPathBeanDefinitionScanner) and a variant thereof for imported configuration classes (using unique fully-qualified class names instead of standard component overriding).

      Note that this strategy does not apply to Bean methods.

      This setter is typically only appropriate when configuring the post-processor as a standalone bean definition in XML, e.g. not using the dedicated AnnotationConfig* application contexts or the <context:annotation-config> element. Any bean name generator specified against the application context will take precedence over any set here.

      Since:
      3.1.1
      See Also:
    • setEnvironment

      public void setEnvironment(org.springframework.core.env.Environment environment)
      Description copied from interface: EnvironmentAware
      Set the Environment that this component runs in.
      Specified by:
      setEnvironment in interface EnvironmentAware
    • setResourceLoader

      public void setResourceLoader(org.springframework.core.io.ResourceLoader resourceLoader)
      Description copied from interface: ResourceLoaderAware
      Set the ResourceLoader that this object runs in.

      This might be a ResourcePatternResolver, which can be checked through instanceof ResourcePatternResolver. See also the ResourcePatternUtils.getResourcePatternResolver method.

      Invoked after population of normal bean properties but before an init callback like InitializingBean's afterPropertiesSet or a custom init-method. Invoked before ApplicationContextAware's setApplicationContext.

      Specified by:
      setResourceLoader in interface ResourceLoaderAware
      Parameters:
      resourceLoader - the ResourceLoader object to be used by this object
      See Also:
      • ResourcePatternResolver
      • ResourcePatternUtils.getResourcePatternResolver(org.springframework.core.io.ResourceLoader)
    • setBeanClassLoader

      public void setBeanClassLoader(ClassLoader beanClassLoader)
      Specified by:
      setBeanClassLoader in interface org.springframework.beans.factory.BeanClassLoaderAware
    • setApplicationStartup

      public void setApplicationStartup(org.springframework.core.metrics.ApplicationStartup applicationStartup)
      Description copied from interface: ApplicationStartupAware
      Set the ApplicationStartup that this object runs with.

      Invoked after population of normal bean properties but before an init callback like InitializingBean's afterPropertiesSet or a custom init-method. Invoked before ApplicationContextAware's setApplicationContext.

      Specified by:
      setApplicationStartup in interface ApplicationStartupAware
      Parameters:
      applicationStartup - application startup to be used by this object
    • postProcessBeanDefinitionRegistry

      public void postProcessBeanDefinitionRegistry(org.springframework.beans.factory.support.BeanDefinitionRegistry registry)
      Derive further bean definitions from the configuration classes in the registry.
      Specified by:
      postProcessBeanDefinitionRegistry in interface org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor
    • postProcessBeanFactory

      public void postProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
      Prepare the Configuration classes for servicing bean requests at runtime by replacing them with CGLIB-enhanced subclasses.
      Specified by:
      postProcessBeanFactory in interface org.springframework.beans.factory.config.BeanFactoryPostProcessor
    • processAheadOfTime

      @Nullable public org.springframework.beans.factory.aot.BeanRegistrationAotContribution processAheadOfTime(org.springframework.beans.factory.support.RegisteredBean registeredBean)
      Specified by:
      processAheadOfTime in interface org.springframework.beans.factory.aot.BeanRegistrationAotProcessor
    • processAheadOfTime

      @Nullable public org.springframework.beans.factory.aot.BeanFactoryInitializationAotContribution processAheadOfTime(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
      Specified by:
      processAheadOfTime in interface org.springframework.beans.factory.aot.BeanFactoryInitializationAotProcessor
    • processConfigBeanDefinitions

      public void processConfigBeanDefinitions(org.springframework.beans.factory.support.BeanDefinitionRegistry registry)
      Build and validate a configuration model based on the registry of Configuration classes.
    • enhanceConfigurationClasses

      public void enhanceConfigurationClasses(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
      Post-processes a BeanFactory in search of Configuration class BeanDefinitions; any candidates are then enhanced by a ConfigurationClassEnhancer. Candidate status is determined by BeanDefinition attribute metadata.
      See Also:
      • ConfigurationClassEnhancer