fixed LifecycleProcessor lookup in a Spring Dynamic Modules context (SPR-6356); moved ConversionService lookup to prepareBeanFactory
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@2502 50f2f4bb-b051-0410-bef5-90022cba6387
This commit is contained in:
parent
8e92336f2b
commit
191bbd909b
|
|
@ -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
|
|||
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
|
|||
// 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
|
|||
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
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
|||
* {@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…
Reference in New Issue