added dedicated onClose notification to differentiate between manual stop and close-driven stop
git-svn-id: https://src.springframework.org/svn/spring-framework/trunk@2420 50f2f4bb-b051-0410-bef5-90022cba6387
This commit is contained in:
parent
a7d77d95cf
commit
ac8543438b
|
|
@ -18,12 +18,21 @@ package org.springframework.context;
|
|||
|
||||
/**
|
||||
* Strategy interface for processing Lifecycle beans within the ApplicationContext.
|
||||
*
|
||||
*
|
||||
* @author Mark Fisher
|
||||
* @author Juergen Hoeller
|
||||
* @since 3.0
|
||||
*/
|
||||
public interface LifecycleProcessor extends Lifecycle {
|
||||
|
||||
/**
|
||||
* Notification of context refresh, e.g. for auto-starting components.
|
||||
*/
|
||||
void onRefresh();
|
||||
|
||||
/**
|
||||
* Notification of context close phase, e.g. for auto-stopping components.
|
||||
*/
|
||||
void onClose();
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@ import java.security.AccessControlException;
|
|||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
|
@ -50,7 +49,6 @@ import org.springframework.context.ApplicationEventPublisherAware;
|
|||
import org.springframework.context.ApplicationListener;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.context.HierarchicalMessageSource;
|
||||
import org.springframework.context.Lifecycle;
|
||||
import org.springframework.context.LifecycleProcessor;
|
||||
import org.springframework.context.MessageSource;
|
||||
import org.springframework.context.MessageSourceAware;
|
||||
|
|
@ -955,7 +953,7 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader
|
|||
}
|
||||
|
||||
// Stop all Lifecycle beans, to avoid delays during individual destruction.
|
||||
this.getLifecycleProcessor().stop();
|
||||
getLifecycleProcessor().onClose();
|
||||
|
||||
// Destroy all cached singletons in the context's BeanFactory.
|
||||
destroyBeans();
|
||||
|
|
@ -1177,40 +1175,17 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader
|
|||
//---------------------------------------------------------------------
|
||||
|
||||
public void start() {
|
||||
this.getLifecycleProcessor().start();
|
||||
getLifecycleProcessor().start();
|
||||
publishEvent(new ContextStartedEvent(this));
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
this.getLifecycleProcessor().stop();
|
||||
getLifecycleProcessor().stop();
|
||||
publishEvent(new ContextStoppedEvent(this));
|
||||
}
|
||||
|
||||
public boolean isRunning() {
|
||||
for (Lifecycle lifecycle : getLifecycleBeans().values()) {
|
||||
if (!lifecycle.isRunning()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a Map of all singleton beans that implement the
|
||||
* Lifecycle interface in this context.
|
||||
* @return Map of Lifecycle beans with bean name as key
|
||||
*/
|
||||
private Map<String, Lifecycle> getLifecycleBeans() {
|
||||
ConfigurableListableBeanFactory beanFactory = getBeanFactory();
|
||||
String[] beanNames = beanFactory.getSingletonNames();
|
||||
Map<String, Lifecycle> beans = new LinkedHashMap<String, Lifecycle>();
|
||||
for (String beanName : beanNames) {
|
||||
Object bean = beanFactory.getSingleton(beanName);
|
||||
if (bean instanceof Lifecycle) {
|
||||
beans.put(beanName, (Lifecycle) bean);
|
||||
}
|
||||
}
|
||||
return beans;
|
||||
return getLifecycleProcessor().isRunning();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -125,6 +125,10 @@ public class DefaultLifecycleProcessor implements LifecycleProcessor, BeanFactor
|
|||
}
|
||||
}
|
||||
|
||||
public void onClose() {
|
||||
stop();
|
||||
}
|
||||
|
||||
/**
|
||||
* Start the specified bean as part of the given set of Lifecycle beans,
|
||||
* making sure that any beans that it depends on are started first.
|
||||
|
|
|
|||
Loading…
Reference in New Issue