From 387e34d881d9286d50446dee0ff62a6a8da98e10 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 24 Apr 2024 13:41:48 +0200 Subject: [PATCH] Wrap depends-on exception for specifically requested top-level bean Closes gh-32470 --- .../beans/factory/support/AbstractBeanFactory.java | 10 ++++++++++ .../context/support/AbstractApplicationContext.java | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java index cc1629b265f..0ce180a749f 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java @@ -316,6 +316,16 @@ public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport imp throw new BeanCreationException(mbd.getResourceDescription(), beanName, "'" + beanName + "' depends on missing bean '" + dep + "'", ex); } + catch (BeanCreationException ex) { + if (requiredType != null) { + // Wrap exception with current bean metadata but only if specifically + // requested (indicated by required type), not for depends-on cascades. + throw new BeanCreationException(mbd.getResourceDescription(), beanName, + "Failed to initialize dependency '" + ex.getBeanName() + "' of " + + requiredType.getSimpleName() + " bean '" + beanName + "'", ex); + } + throw ex; + } } } diff --git a/spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java b/spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java index 6036342c6c8..53b48c2b702 100644 --- a/spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java +++ b/spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java @@ -949,7 +949,7 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader // Initialize LoadTimeWeaverAware beans early to allow for registering their transformers early. String[] weaverAwareNames = beanFactory.getBeanNamesForType(LoadTimeWeaverAware.class, false, false); for (String weaverAwareName : weaverAwareNames) { - getBean(weaverAwareName); + beanFactory.getBean(weaverAwareName, LoadTimeWeaverAware.class); } // Stop using the temporary ClassLoader for type matching.