Class MapMergeDirectiveBeanPostProcessor

  • All Implemented Interfaces:
    org.springframework.beans.factory.Aware, org.springframework.beans.factory.BeanFactoryAware, org.springframework.beans.factory.config.BeanPostProcessor, org.springframework.beans.factory.InitializingBean
    Direct Known Subclasses:
    MapMergeDirectiveBeanPostProcessor

    public class MapMergeDirectiveBeanPostProcessor
    extends java.lang.Object
    implements org.springframework.beans.factory.BeanFactoryAware, org.springframework.beans.factory.config.BeanPostProcessor, org.springframework.beans.factory.InitializingBean
    This is BeanPostProcessor for adding items into existing maps.

    It creates a cache of MapMergeDirective bean definitions found in the system during its initialization. Then each bean is checked if it should be modified by any of cached directives. If yes, we use BeanDefinitionValueResolver (custom implementation of spring class) to create a object out of beanDefiniton without creating a proper MapMergeDirective bean (this is impossible at this point as it would create circular dependency). The representation of MapMergeDirective is then applied to target bean.

    Forcing this BeanPostProcessor to load all MapMergeDirective instances during its initialization (via dependency injection or by extracting them form ApplicationContext) will lead to change in order in which beans are intialized. Especially some beans will be instanciated before other BeanPostProcessors which may highly affect stability of the system, so its a bad idea.

    • Constructor Detail

      • MapMergeDirectiveBeanPostProcessor

        public MapMergeDirectiveBeanPostProcessor()
    • Method Detail

      • 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
      • afterPropertiesSet

        public void afterPropertiesSet()
                                throws java.lang.Exception
        Creates cache of mapMergeDirective beanDefinitions.
        Specified by:
        afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
        Throws:
        java.lang.Exception
      • isSupportedClass

        protected boolean isSupportedClass​(java.lang.String name)
      • postProcessBeforeInitialization

        public java.lang.Object postProcessBeforeInitialization​(java.lang.Object bean,
                                                                java.lang.String beanName)
                                                         throws org.springframework.beans.BeansException
        Specified by:
        postProcessBeforeInitialization in interface org.springframework.beans.factory.config.BeanPostProcessor
        Throws:
        org.springframework.beans.BeansException
      • postProcessAfterInitialization

        public java.lang.Object postProcessAfterInitialization​(java.lang.Object bean,
                                                               java.lang.String beanName)
                                                        throws org.springframework.beans.BeansException
        Specified by:
        postProcessAfterInitialization in interface org.springframework.beans.factory.config.BeanPostProcessor
        Throws:
        org.springframework.beans.BeansException
      • shouldApplyMergeDirectiveBean

        protected boolean shouldApplyMergeDirectiveBean​(java.lang.String beanName)