Class MapMergeDirectiveBeanPostProcessor

java.lang.Object
de.hybris.platform.spring.config.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 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 Details

    • MapMergeDirectiveBeanPostProcessor

      public MapMergeDirectiveBeanPostProcessor()
  • Method Details

    • 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 Exception
      Creates cache of mapMergeDirective beanDefinitions.
      Specified by:
      afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
      Throws:
      Exception
    • isSupportedClass

      protected boolean isSupportedClass(String name)
    • postProcessBeforeInitialization

      public Object postProcessBeforeInitialization(Object bean, 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 Object postProcessAfterInitialization(Object bean, 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(String beanName)