Class ListMergeDirectiveBeanPostProcessor

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

public class ListMergeDirectiveBeanPostProcessor 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 list.

It creates a cache of ListMergeDirective 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 ListMergeDirective bean (this is impossible at this point as it would create circular dependency). The representation of ListMergeDirective is then applied to target bean.

Forcing this BeanPostProcessor to load all ListMergeDirective 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

    • ListMergeDirectiveBeanPostProcessor

      public ListMergeDirectiveBeanPostProcessor()
  • 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 listMergeDirective 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)
    • processMergeDirective

      protected void processMergeDirective(ListMergeDirective listMergeDirective, String lmdBeanName, Object targetBean, String targetName)
    • resolveListBean

      protected List<Object> resolveListBean(ListMergeDirective lmd, String directiveBeanName, Object bean, String beanName)
    • getListByDependency

      protected List<Object> getListByDependency(Object dependency, String dependencyName, String directiveBeanName)
    • getListByPropertyDescriptor

      protected List<Object> getListByPropertyDescriptor(Object bean, String beanName, String propertyDescriptor, String directiveBeanName)
    • getListByReflection

      protected List<Object> getListByReflection(Object bean, String beanName, String fieldName, String directiveBeanName)