Class AnnotationBeanDefinitionRegistryPostProcessor

  • All Implemented Interfaces:
    org.springframework.beans.factory.Aware, org.springframework.beans.factory.BeanClassLoaderAware, org.springframework.beans.factory.BeanFactoryAware, org.springframework.beans.factory.config.BeanFactoryPostProcessor, org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor, org.springframework.context.EnvironmentAware, org.springframework.context.ResourceLoaderAware

    public abstract class AnnotationBeanDefinitionRegistryPostProcessor
    extends java.lang.Object
    implements org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor, org.springframework.beans.factory.BeanFactoryAware, org.springframework.context.EnvironmentAware, org.springframework.context.ResourceLoaderAware, org.springframework.beans.factory.BeanClassLoaderAware
    An abstract class for the extension to BeanDefinitionRegistryPostProcessor, which will execute two main registration methods orderly:
    1. registerPrimaryBeanDefinitions(ExposingClassPathBeanDefinitionScanner, String[]) : Scan and register the primary BeanDefinitions that were annotated by the supported annotation types, and then return the Map with bean name plus aliases if present and primary AnnotatedBeanDefinitions, it's allowed to be override
    2. registerSecondaryBeanDefinitions(ExposingClassPathBeanDefinitionScanner, Map, String[]) : it's mandatory to be override by the sub-class to register secondary BeanDefinitions if required

    Example Usage

    {@code
     public class MyAnnotationBeanDefinitionRegistryPostProcessor extends AnnotationBeanDefinitionRegistryPostProcessor {
    
         public MyAnnotationBeanDefinitionRegistryPostProcessor() {
             super(MyAnnotation.class, "com.example.package");
         }
    
         protected Map registerPrimaryBeanDefinitions(ExposingClassPathBeanDefinitionScanner scanner,
                                                                                       String[] basePackages) {
             // Custom logic to register primary bean definitions
             return super.registerPrimaryBeanDefinitions(scanner, basePackages);
         }
    Since:
    1.0.0
    Author:
    Mercy
    • Field Detail

      • logger

        protected final io.microsphere.logging.Logger logger
    • Constructor Detail

      • AnnotationBeanDefinitionRegistryPostProcessor

        public AnnotationBeanDefinitionRegistryPostProcessor​(java.lang.Class<? extends java.lang.annotation.Annotation> primaryAnnotationType,
                                                             java.lang.Class<?>... basePackageClasses)
      • AnnotationBeanDefinitionRegistryPostProcessor

        public AnnotationBeanDefinitionRegistryPostProcessor​(java.lang.Class<? extends java.lang.annotation.Annotation> primaryAnnotationType,
                                                             java.lang.String... packagesToScan)
      • AnnotationBeanDefinitionRegistryPostProcessor

        public AnnotationBeanDefinitionRegistryPostProcessor​(java.lang.Class<? extends java.lang.annotation.Annotation> primaryAnnotationType,
                                                             java.lang.Iterable<java.lang.String> packagesToScan)
    • Method Detail

      • addSupportedAnnotationType

        public void addSupportedAnnotationType​(java.lang.Class<? extends java.lang.annotation.Annotation>... annotationTypes)
      • getAnnotation

        protected static java.lang.annotation.Annotation getAnnotation​(java.lang.reflect.AnnotatedElement annotatedElement,
                                                                       java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
      • postProcessBeanDefinitionRegistry

        public final void postProcessBeanDefinitionRegistry​(org.springframework.beans.factory.support.BeanDefinitionRegistry registry)
                                                     throws org.springframework.beans.BeansException
        Specified by:
        postProcessBeanDefinitionRegistry in interface org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor
        Throws:
        org.springframework.beans.BeansException
      • registerPrimaryBeanDefinitions

        protected java.util.Map<java.lang.String,​org.springframework.beans.factory.annotation.AnnotatedBeanDefinition> registerPrimaryBeanDefinitions​(ExposingClassPathBeanDefinitionScanner scanner,
                                                                                                                                                            java.lang.String[] basePackages)
        Scan and register the primary BeanDefinitions that were annotated by the supported annotation types, and then return the Map with bean name plus aliases if present and primary AnnotatedBeanDefinitions.

        Current method is allowed to be override by the sub-class to change the registration logic

        Parameters:
        scanner - ExposingClassPathBeanDefinitionScanner
        basePackages - the base packages to scan
        Returns:
        the Map with bean name plus aliases if present and primary AnnotatedBeanDefinitions
      • registerSecondaryBeanDefinitions

        protected abstract void registerSecondaryBeanDefinitions​(ExposingClassPathBeanDefinitionScanner scanner,
                                                                 java.util.Map<java.lang.String,​org.springframework.beans.factory.annotation.AnnotatedBeanDefinition> primaryBeanDefinitions,
                                                                 java.lang.String[] basePackages)
        Register the secondary BeanDefinitions

        Current method is allowed to be override by the sub-class to change the registration logic

        Parameters:
        scanner - the ExposingClassPathBeanDefinitionScanner instance
        primaryBeanDefinitions - the Map with bean name plus aliases if present and primary AnnotatedBeanDefinitions, which may be empty
        basePackages - the base packages to scan
      • postProcessBeanFactory

        public void postProcessBeanFactory​(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory)
                                    throws org.springframework.beans.BeansException
        Specified by:
        postProcessBeanFactory in interface org.springframework.beans.factory.config.BeanFactoryPostProcessor
        Throws:
        org.springframework.beans.BeansException
      • resolveBasePackages

        protected java.lang.String[] resolveBasePackages​(java.util.Set<java.lang.String> packagesToScan)
        Resolve the placeholders for the raw scanned packages to scan
        Parameters:
        packagesToScan - the raw scanned packages to scan
        Returns:
        non-null
      • resolveBeanClass

        protected final java.lang.Class<?> resolveBeanClass​(org.springframework.beans.factory.config.BeanDefinitionHolder beanDefinitionHolder)
      • resolveBeanClass

        protected final java.lang.Class<?> resolveBeanClass​(org.springframework.beans.factory.config.BeanDefinition beanDefinition)
      • setBeanClassLoader

        public void setBeanClassLoader​(java.lang.ClassLoader classLoader)
        Specified by:
        setBeanClassLoader in interface org.springframework.beans.factory.BeanClassLoaderAware
      • getSupportedAnnotationTypes

        public java.util.Set<java.lang.Class<? extends java.lang.annotation.Annotation>> getSupportedAnnotationTypes()
      • getSupportedAnnotationTypeNames

        protected java.util.Set<java.lang.String> getSupportedAnnotationTypeNames()
      • getPackagesToScan

        public java.util.Set<java.lang.String> getPackagesToScan()
      • getBeanFactory

        public org.springframework.beans.factory.config.ConfigurableListableBeanFactory getBeanFactory()
      • setBeanFactory

        public void setBeanFactory​(org.springframework.beans.factory.BeanFactory beanFactory)
                            throws org.springframework.beans.BeansException
        Specified by:
        setBeanFactory in interface org.springframework.beans.factory.BeanFactoryAware
        Throws:
        org.springframework.beans.BeansException
      • getEnvironment

        public org.springframework.core.env.ConfigurableEnvironment getEnvironment()
      • setEnvironment

        public void setEnvironment​(org.springframework.core.env.Environment environment)
        Specified by:
        setEnvironment in interface org.springframework.context.EnvironmentAware
      • getResourceLoader

        public org.springframework.core.io.ResourceLoader getResourceLoader()
      • setResourceLoader

        public void setResourceLoader​(org.springframework.core.io.ResourceLoader resourceLoader)
        Specified by:
        setResourceLoader in interface org.springframework.context.ResourceLoaderAware
      • getClassLoader

        public java.lang.ClassLoader getClassLoader()
      • setClassLoader

        public void setClassLoader​(java.lang.ClassLoader classLoader)