From a0c4d2c13c7cbe8216bdb8d3b2ecd7c2ff83d23b Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Sun, 13 Dec 2009 14:08:08 +0000 Subject: [PATCH] detect Lifecycle-implementing FactoryBeans as well (SPR-6545) --- .../context/support/DefaultLifecycleProcessor.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/org.springframework.context/src/main/java/org/springframework/context/support/DefaultLifecycleProcessor.java b/org.springframework.context/src/main/java/org/springframework/context/support/DefaultLifecycleProcessor.java index e45356103ad..2bc386d1149 100644 --- a/org.springframework.context/src/main/java/org/springframework/context/support/DefaultLifecycleProcessor.java +++ b/org.springframework.context/src/main/java/org/springframework/context/support/DefaultLifecycleProcessor.java @@ -217,13 +217,15 @@ public class DefaultLifecycleProcessor implements LifecycleProcessor, BeanFactor } private Map getLifecycleBeans() { - String[] beanNames = this.beanFactory.getBeanNamesForType(Lifecycle.class, false, false); Map beans = new LinkedHashMap(); - for (String beanName : beanNames) { - if (this.beanFactory.containsSingleton(beanName) || - SmartLifecycle.class.isAssignableFrom(this.beanFactory.getType(beanName))) { - Object bean = this.beanFactory.getBean(beanName); - if (!this.equals(bean)) { + Map smartLifecycles = + this.beanFactory.getBeansOfType(SmartLifecycle.class, false, true); + beans.putAll(smartLifecycles); + String[] singletonNames = this.beanFactory.getSingletonNames(); + for (String beanName : singletonNames) { + if (!beans.containsKey(beanName)) { + Object bean = this.beanFactory.getSingleton(beanName); + if (bean instanceof Lifecycle && !this.equals(bean)) { beans.put(beanName, (Lifecycle) bean); } }