Browse Source

Wrap depends-on exception for specifically requested top-level bean

Closes gh-32470
pull/32864/head
Juergen Hoeller 2 years ago
parent
commit
387e34d881
  1. 10
      spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java
  2. 2
      spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java

10
spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java

@ -316,6 +316,16 @@ public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport imp @@ -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;
}
}
}

2
spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java

@ -949,7 +949,7 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader @@ -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.

Loading…
Cancel
Save