Skip to content

Commit 65622bd

Browse files
committed
revised DefaultLifecycleProcessor's handling of circular dependencies to avoid stack overflow (SPR-7266)
1 parent 882289b commit 65622bd

File tree

1 file changed

+2
-4
lines changed

1 file changed

+2
-4
lines changed

org.springframework.context/src/main/java/org/springframework/context/support/DefaultLifecycleProcessor.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ private void startBeans(boolean autoStartupOnly) {
152152
* @param beanName the name of the bean to start
153153
*/
154154
private void doStart(Map<String, ? extends Lifecycle> lifecycleBeans, String beanName) {
155-
Lifecycle bean = lifecycleBeans.get(beanName);
155+
Lifecycle bean = lifecycleBeans.remove(beanName);
156156
if (bean != null && !this.equals(bean)) {
157157
String[] dependenciesForBean = this.beanFactory.getDependenciesForBean(beanName);
158158
for (String dependency : dependenciesForBean) {
@@ -172,7 +172,6 @@ private void doStart(Map<String, ? extends Lifecycle> lifecycleBeans, String bea
172172
logger.debug("Successfully started bean '" + beanName + "'");
173173
}
174174
}
175-
lifecycleBeans.remove(beanName);
176175
}
177176
}
178177

@@ -207,7 +206,7 @@ private void stopBeans() {
207206
private void doStop(Map<String, ? extends Lifecycle> lifecycleBeans, final String beanName,
208207
final CountDownLatch latch, final Set<String> countDownBeanNames) {
209208

210-
Lifecycle bean = lifecycleBeans.get(beanName);
209+
Lifecycle bean = lifecycleBeans.remove(beanName);
211210
if (bean != null) {
212211
String[] dependentBeans = this.beanFactory.getDependentBeans(beanName);
213212
for (String dependentBean : dependentBeans) {
@@ -250,7 +249,6 @@ else if (bean instanceof SmartLifecycle) {
250249
logger.warn("Failed to stop bean '" + beanName + "'", ex);
251250
}
252251
}
253-
lifecycleBeans.remove(beanName);
254252
}
255253
}
256254

0 commit comments

Comments
 (0)