|
|
|
@ -30,6 +30,7 @@ import org.apache.commons.logging.LogFactory; |
|
|
|
|
|
|
|
|
|
|
|
import org.springframework.beans.factory.BeanFactory; |
|
|
|
import org.springframework.beans.factory.BeanFactory; |
|
|
|
import org.springframework.beans.factory.BeanFactoryAware; |
|
|
|
import org.springframework.beans.factory.BeanFactoryAware; |
|
|
|
|
|
|
|
import org.springframework.beans.factory.BeanFactoryUtils; |
|
|
|
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; |
|
|
|
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; |
|
|
|
import org.springframework.context.Lifecycle; |
|
|
|
import org.springframework.context.Lifecycle; |
|
|
|
import org.springframework.context.LifecycleProcessor; |
|
|
|
import org.springframework.context.LifecycleProcessor; |
|
|
|
@ -216,17 +217,22 @@ public class DefaultLifecycleProcessor implements LifecycleProcessor, BeanFactor |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Retrieve all applicable Lifecycle beans: all singletons that have already been created, |
|
|
|
|
|
|
|
* as well as all SmartLifecycle beans (even if they are marked as lazy-init). |
|
|
|
|
|
|
|
*/ |
|
|
|
private Map<String, Lifecycle> getLifecycleBeans() { |
|
|
|
private Map<String, Lifecycle> getLifecycleBeans() { |
|
|
|
Map<String, Lifecycle> beans = new LinkedHashMap<String, Lifecycle>(); |
|
|
|
Map<String, Lifecycle> beans = new LinkedHashMap<String, Lifecycle>(); |
|
|
|
Map<String, SmartLifecycle> smartLifecycles = |
|
|
|
String[] beanNames = this.beanFactory.getBeanNamesForType(Lifecycle.class, false, false); |
|
|
|
this.beanFactory.getBeansOfType(SmartLifecycle.class, false, true); |
|
|
|
for (String beanName : beanNames) { |
|
|
|
beans.putAll(smartLifecycles); |
|
|
|
String beanNameToRegister = BeanFactoryUtils.transformedBeanName(beanName); |
|
|
|
String[] singletonNames = this.beanFactory.getSingletonNames(); |
|
|
|
String beanNameToCheck = (this.beanFactory.isFactoryBean(beanNameToRegister) ? |
|
|
|
for (String beanName : singletonNames) { |
|
|
|
BeanFactory.FACTORY_BEAN_PREFIX + beanName : beanName); |
|
|
|
if (!beans.containsKey(beanName)) { |
|
|
|
if (this.beanFactory.containsSingleton(beanNameToRegister) || |
|
|
|
Object bean = this.beanFactory.getSingleton(beanName); |
|
|
|
SmartLifecycle.class.isAssignableFrom(this.beanFactory.getType(beanNameToCheck))) { |
|
|
|
if (bean instanceof Lifecycle && !this.equals(bean)) { |
|
|
|
Lifecycle bean = this.beanFactory.getBean(beanNameToCheck, Lifecycle.class); |
|
|
|
beans.put(beanName, (Lifecycle) bean); |
|
|
|
if (bean != this) { |
|
|
|
|
|
|
|
beans.put(beanNameToRegister, bean); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|