Browse Source

fixed LifecycleProcessor lookup in a Spring Dynamic Modules context (SPR-6356); moved ConversionService lookup to prepareBeanFactory

pull/23217/head
Juergen Hoeller 16 years ago
parent
commit
da2ddca34c
  1. 104
      org.springframework.context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java

104
org.springframework.context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java

@ -297,19 +297,6 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader @@ -297,19 +297,6 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader
}
}
/**
* Return the internal LifecycleProcessor used by the context.
* @return the internal LifecycleProcessor (never <code>null</code>)
* @throws IllegalStateException if the context has not been initialized yet
*/
private LifecycleProcessor getLifecycleProcessor() {
if (this.lifecycleProcessor == null) {
throw new IllegalStateException("LifecycleProcessor not initialized - " +
"call 'refresh' before invoking lifecycle methods via the context: " + this);
}
return this.lifecycleProcessor;
}
/**
* Return the internal ApplicationEventMulticaster used by the context.
* @return the internal ApplicationEventMulticaster (never <code>null</code>)
@ -323,6 +310,19 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader @@ -323,6 +310,19 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader
return this.applicationEventMulticaster;
}
/**
* Return the internal LifecycleProcessor used by the context.
* @return the internal LifecycleProcessor (never <code>null</code>)
* @throws IllegalStateException if the context has not been initialized yet
*/
private LifecycleProcessor getLifecycleProcessor() {
if (this.lifecycleProcessor == null) {
throw new IllegalStateException("LifecycleProcessor not initialized - " +
"call 'refresh' before invoking lifecycle methods via the context: " + this);
}
return this.lifecycleProcessor;
}
/**
* Return the ResourcePatternResolver to use for resolving location patterns
* into Resource instances. Default is a
@ -400,15 +400,9 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader @@ -400,15 +400,9 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader
// Register bean processors that intercept bean creation.
registerBeanPostProcessors(beanFactory);
// Initialize conversion service for this context.
initConversionService();
// Initialize message source for this context.
initMessageSource();
// Initialize lifecycle processor for this context.
initLifecycleProcessor();
// Initialize event multicaster for this context.
initApplicationEventMulticaster();
@ -494,6 +488,12 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader @@ -494,6 +488,12 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader
beanFactory.registerResolvableDependency(ApplicationEventPublisher.class, this);
beanFactory.registerResolvableDependency(ApplicationContext.class, this);
// Initialize conversion service for this context.
if (beanFactory.containsBean(CONVERSION_SERVICE_BEAN_NAME)) {
beanFactory.setConversionService(
beanFactory.getBean(CONVERSION_SERVICE_BEAN_NAME, ConversionService.class));
}
// Detect a LoadTimeWeaver and prepare for weaving, if found.
if (beanFactory.containsBean(LOAD_TIME_WEAVER_BEAN_NAME)) {
beanFactory.addBeanPostProcessor(new LoadTimeWeaverAwareProcessor(beanFactory));
@ -704,16 +704,6 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader @@ -704,16 +704,6 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader
}
}
/**
* Initialize the BeanFactory's ConversionService.
*/
protected void initConversionService() {
ConfigurableListableBeanFactory beanFactory = getBeanFactory();
if (beanFactory.containsBean(CONVERSION_SERVICE_BEAN_NAME)) {
beanFactory.setConversionService(beanFactory.getBean(CONVERSION_SERVICE_BEAN_NAME, ConversionService.class));
}
}
/**
* Initialize the MessageSource.
* Use parent's if none defined in this context.
@ -748,6 +738,31 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader @@ -748,6 +738,31 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader
}
}
/**
* Initialize the ApplicationEventMulticaster.
* Uses SimpleApplicationEventMulticaster if none defined in the context.
* @see org.springframework.context.event.SimpleApplicationEventMulticaster
*/
protected void initApplicationEventMulticaster() {
ConfigurableListableBeanFactory beanFactory = getBeanFactory();
if (beanFactory.containsLocalBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME)) {
this.applicationEventMulticaster =
beanFactory.getBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME, ApplicationEventMulticaster.class);
if (logger.isDebugEnabled()) {
logger.debug("Using ApplicationEventMulticaster [" + this.applicationEventMulticaster + "]");
}
}
else {
this.applicationEventMulticaster = new SimpleApplicationEventMulticaster(beanFactory);
beanFactory.registerSingleton(APPLICATION_EVENT_MULTICASTER_BEAN_NAME, this.applicationEventMulticaster);
if (logger.isDebugEnabled()) {
logger.debug("Unable to locate ApplicationEventMulticaster with name '" +
APPLICATION_EVENT_MULTICASTER_BEAN_NAME +
"': using default [" + this.applicationEventMulticaster + "]");
}
}
}
/**
* Initialize the LifecycleProcessor.
* Uses DefaultLifecycleProcessor if none defined in the context.
@ -775,31 +790,6 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader @@ -775,31 +790,6 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader
}
}
/**
* Initialize the ApplicationEventMulticaster.
* Uses SimpleApplicationEventMulticaster if none defined in the context.
* @see org.springframework.context.event.SimpleApplicationEventMulticaster
*/
protected void initApplicationEventMulticaster() {
ConfigurableListableBeanFactory beanFactory = getBeanFactory();
if (beanFactory.containsLocalBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME)) {
this.applicationEventMulticaster =
beanFactory.getBean(APPLICATION_EVENT_MULTICASTER_BEAN_NAME, ApplicationEventMulticaster.class);
if (logger.isDebugEnabled()) {
logger.debug("Using ApplicationEventMulticaster [" + this.applicationEventMulticaster + "]");
}
}
else {
this.applicationEventMulticaster = new SimpleApplicationEventMulticaster(beanFactory);
beanFactory.registerSingleton(APPLICATION_EVENT_MULTICASTER_BEAN_NAME, this.applicationEventMulticaster);
if (logger.isDebugEnabled()) {
logger.debug("Unable to locate ApplicationEventMulticaster with name '" +
APPLICATION_EVENT_MULTICASTER_BEAN_NAME +
"': using default [" + this.applicationEventMulticaster + "]");
}
}
}
/**
* Template method which can be overridden to add context-specific refresh work.
* Called on initialization of special beans, before instantiation of singletons.
@ -858,7 +848,11 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader @@ -858,7 +848,11 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader
* {@link org.springframework.context.event.ContextRefreshedEvent}.
*/
protected void finishRefresh() {
this.lifecycleProcessor.onRefresh();
// Initialize lifecycle processor for this context.
initLifecycleProcessor();
// Propagate refresh to lifecycle processor first.
getLifecycleProcessor().onRefresh();
// Publish the final event.
publishEvent(new ContextRefreshedEvent(this));

Loading…
Cancel
Save