List of usage examples for org.springframework.beans.factory.config ConfigurableListableBeanFactory getBeanClassLoader
@Nullable ClassLoader getBeanClassLoader();
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) *//*from w ww.j av a 2 s . com*/ 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); } }
From source file:org.springframework.context.support.AbstractApplicationContext.java
/** * Configure the factory's standard context characteristics, * such as the context's ClassLoader and post-processors. * @param beanFactory the BeanFactory to configure *///from ww w . j a va 2 s . c o m protected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory) { // Tell the internal bean factory to use the context's class loader etc. beanFactory.setBeanClassLoader(getClassLoader()); beanFactory.setBeanExpressionResolver(new StandardBeanExpressionResolver(beanFactory.getBeanClassLoader())); beanFactory.addPropertyEditorRegistrar(new ResourceEditorRegistrar(this, getEnvironment())); // Configure the bean factory with context callbacks. beanFactory.addBeanPostProcessor(new ApplicationContextAwareProcessor(this)); beanFactory.ignoreDependencyInterface(EnvironmentAware.class); beanFactory.ignoreDependencyInterface(EmbeddedValueResolverAware.class); beanFactory.ignoreDependencyInterface(ResourceLoaderAware.class); beanFactory.ignoreDependencyInterface(ApplicationEventPublisherAware.class); beanFactory.ignoreDependencyInterface(MessageSourceAware.class); beanFactory.ignoreDependencyInterface(ApplicationContextAware.class); // BeanFactory interface not registered as resolvable type in a plain factory. // MessageSource registered (and found for autowiring) as a bean. beanFactory.registerResolvableDependency(BeanFactory.class, beanFactory); beanFactory.registerResolvableDependency(ResourceLoader.class, this); beanFactory.registerResolvableDependency(ApplicationEventPublisher.class, this); beanFactory.registerResolvableDependency(ApplicationContext.class, this); // Register early post-processor for detecting inner beans as ApplicationListeners. beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(this)); // Detect a LoadTimeWeaver and prepare for weaving, if found. if (beanFactory.containsBean(LOAD_TIME_WEAVER_BEAN_NAME)) { beanFactory.addBeanPostProcessor(new LoadTimeWeaverAwareProcessor(beanFactory)); // Set a temporary ClassLoader for type matching. beanFactory.setTempClassLoader(new ContextTypeMatchClassLoader(beanFactory.getBeanClassLoader())); } // Register default environment beans. if (!beanFactory.containsLocalBean(ENVIRONMENT_BEAN_NAME)) { beanFactory.registerSingleton(ENVIRONMENT_BEAN_NAME, getEnvironment()); } if (!beanFactory.containsLocalBean(SYSTEM_PROPERTIES_BEAN_NAME)) { beanFactory.registerSingleton(SYSTEM_PROPERTIES_BEAN_NAME, getEnvironment().getSystemProperties()); } if (!beanFactory.containsLocalBean(SYSTEM_ENVIRONMENT_BEAN_NAME)) { beanFactory.registerSingleton(SYSTEM_ENVIRONMENT_BEAN_NAME, getEnvironment().getSystemEnvironment()); } }
From source file:org.springframework.context.support.AbstractApplicationContext.java
/** * Instantiate and invoke all registered BeanFactoryPostProcessor beans, * respecting explicit order if given./*from ww w. j a v a2 s. c om*/ * <p>Must be called before singleton instantiation. */ protected void invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory) { PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors()); // Detect a LoadTimeWeaver and prepare for weaving, if found in the meantime // (e.g. through an @Bean method registered by ConfigurationClassPostProcessor) if (beanFactory.getTempClassLoader() == null && beanFactory.containsBean(LOAD_TIME_WEAVER_BEAN_NAME)) { beanFactory.addBeanPostProcessor(new LoadTimeWeaverAwareProcessor(beanFactory)); beanFactory.setTempClassLoader(new ContextTypeMatchClassLoader(beanFactory.getBeanClassLoader())); } }
From source file:org.springframework.flex.config.HibernateSerializationConfigPostProcessor.java
@SuppressWarnings("unchecked") public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { if (isHibernateDetected(beanFactory.getBeanClassLoader())) { //Make sure there is a MessageBrokerFactoryBean present BeanDefinition messageBrokerBeanDef = findMessageBrokerFactoryBeanDefinition(beanFactory); Assert.notNull(// w w w . jav a 2 s . c o m "Could not find an appropriate bean definition for MessageBrokerBeanDefinitionFactoryBean."); MutablePropertyValues brokerProps = messageBrokerBeanDef.getPropertyValues(); ManagedSet<RuntimeBeanReference> configProcessors; if (brokerProps.getPropertyValue(CONFIG_PROCESSORS_PROPERTY) != null) { configProcessors = (ManagedSet<RuntimeBeanReference>) brokerProps .getPropertyValue(CONFIG_PROCESSORS_PROPERTY).getValue(); } else { configProcessors = new ManagedSet<RuntimeBeanReference>(); } //Abort if HibernateConfigProcessor is already present if (isAmfConversionServiceProcessorConfigured(beanFactory, configProcessors)) { return; } if (!ClassUtils.isAssignableValue(BeanDefinitionRegistry.class, beanFactory)) { if (log.isWarnEnabled()) { log.warn( "Hibernate AMF serialization support could not be auto-configured because the current BeanFactory does not implement " + "BeanDefinitionRegistry. In order for this support to be enabled, you must manually configure an instance of " + HIBERNATE_CONFIG_PROCESSOR_CLASS); } } BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory; //Add the appropriate HibernateConfigProcessor bean definition BeanDefinitionBuilder processorBuilder; if (isJpaDetected(beanFactory.getBeanClassLoader())) { processorBuilder = BeanDefinitionBuilder.rootBeanDefinition(JPA_HIBERNATE_CONFIG_PROCESSOR_CLASS); } else { processorBuilder = BeanDefinitionBuilder.rootBeanDefinition(HIBERNATE_CONFIG_PROCESSOR_CLASS); } String processorId = BeanDefinitionReaderUtils .registerWithGeneratedName(processorBuilder.getBeanDefinition(), registry); configProcessors.add(new RuntimeBeanReference(processorId)); } }
From source file:org.springframework.flex.config.HibernateSerializationConfigPostProcessor.java
private boolean isAmfConversionServiceProcessorConfigured(ConfigurableListableBeanFactory beanFactory, ManagedSet<RuntimeBeanReference> configProcessors) { for (RuntimeBeanReference configProcessor : configProcessors) { BeanDefinition bd = beanFactory.getMergedBeanDefinition(configProcessor.getBeanName()); if (bd instanceof AbstractBeanDefinition) { AbstractBeanDefinition abd = (AbstractBeanDefinition) bd; if (!abd.hasBeanClass()) { try { abd.resolveBeanClass(beanFactory.getBeanClassLoader()); } catch (ClassNotFoundException ex) { throw new CannotLoadBeanClassException(abd.getResourceDescription(), configProcessor.getBeanName(), abd.getBeanClassName(), ex); }//from w w w .jav a 2 s . co m } if (AbstractAmfConversionServiceConfigProcessor.class.isAssignableFrom(abd.getBeanClass())) { return true; } } } return false; }