List of usage examples for org.springframework.beans.factory.config ConfigurableListableBeanFactory copyConfigurationFrom
void copyConfigurationFrom(ConfigurableBeanFactory otherFactory);
From source file:org.springframework.batch.core.configuration.support.AbstractApplicationContextFactory.java
/** * Extension point for special subclasses that want to do more complex things with the bean factory prior to * refresh. The default implementation copies all configuration from the parent according to the * {@link #setCopyConfiguration(boolean) flag} set. * * @param parent the parent bean factory for the new context (will never be null) * @param beanFactory the new bean factory before bean definitions are loaded * * @see AbstractApplicationContextFactory#setCopyConfiguration(boolean) * @see DefaultListableBeanFactory#copyConfigurationFrom(ConfigurableBeanFactory) *//* ww w. ja v a 2s. co m*/ protected void prepareBeanFactory(ConfigurableListableBeanFactory parent, ConfigurableListableBeanFactory beanFactory) { if (copyConfiguration && parent != null) { List<BeanPostProcessor> parentPostProcessors = new ArrayList<BeanPostProcessor>(); List<BeanPostProcessor> childPostProcessors = new ArrayList<BeanPostProcessor>(); childPostProcessors.addAll(beanFactory instanceof AbstractBeanFactory ? ((AbstractBeanFactory) beanFactory).getBeanPostProcessors() : new ArrayList<BeanPostProcessor>()); parentPostProcessors.addAll( parent instanceof AbstractBeanFactory ? ((AbstractBeanFactory) parent).getBeanPostProcessors() : new ArrayList<BeanPostProcessor>()); try { Class<?> applicationContextAwareProcessorClass = ClassUtils.forName( "org.springframework.context.support.ApplicationContextAwareProcessor", parent.getBeanClassLoader()); for (BeanPostProcessor beanPostProcessor : new ArrayList<BeanPostProcessor>(parentPostProcessors)) { if (applicationContextAwareProcessorClass.isAssignableFrom(beanPostProcessor.getClass())) { logger.debug("Removing parent ApplicationContextAwareProcessor"); parentPostProcessors.remove(beanPostProcessor); } } } catch (ClassNotFoundException e) { throw new IllegalStateException(e); } List<BeanPostProcessor> aggregatedPostProcessors = new ArrayList<BeanPostProcessor>(); aggregatedPostProcessors.addAll(childPostProcessors); aggregatedPostProcessors.addAll(parentPostProcessors); for (BeanPostProcessor beanPostProcessor : new ArrayList<BeanPostProcessor>(aggregatedPostProcessors)) { for (Class<?> cls : beanPostProcessorExcludeClasses) { if (cls.isAssignableFrom(beanPostProcessor.getClass())) { if (logger.isDebugEnabled()) { logger.debug("Removing bean post processor: " + beanPostProcessor + " of type " + cls); } aggregatedPostProcessors.remove(beanPostProcessor); } } } beanFactory.copyConfigurationFrom(parent); List<BeanPostProcessor> beanPostProcessors = beanFactory instanceof AbstractBeanFactory ? ((AbstractBeanFactory) beanFactory).getBeanPostProcessors() : new ArrayList<BeanPostProcessor>(); beanPostProcessors.clear(); beanPostProcessors.addAll(aggregatedPostProcessors); } }