Feature Description
Currently, users relies on --debug flag to diagnose complex Spring Boot configuration precedence, condition evaluations, and auto-configurations. It can print out positive and negative condition matches (e.g., @ConditionalOnClass, @ConditionalOnMissingBean) for auto-configuration classes. It explains why a configuration evaluated to true or false, but not which parent configuration or @Import chain pulled it into the context.
There is no native way to visualize the actual configuration class import tree (i.e., showing how @Configuration classes, @Import selectors, inner configurations, and auto-configurations trigger one another hierarchically) directly during application startup.
Adding an optional configuration tree logger would make debugging configuration precedence, custom starter ordering, and bean initialization issues significantly easier.
Motivation / Use Case
When building large modular applications or custom Spring Boot starters, developer issues often stem from:
- Understanding why a specific auto-configuration or nested configuration was pulled into the context.
- Tracking deep chains of
@Import / @ImportSelector / @ImportResource annotations.
- Verifying processing precedence among user configurations,
@AutoConfigureBefore, and @AutoConfigureAfter.
Proposed Implementation
Implementing this feature is straightforward, as a dedicated logger or tree printer can run during the BeanFactoryPostProcessor or ApplicationListener phase to provide instant visual insight into the configuration structure during startup without extra endpoint queries.
Sample code
@Configuration
public class ConfigurationLoggerConfig implements BeanFactoryPostProcessor {
private static final Logger log = LoggerFactory.getLogger(ConfigurationLoggerConfig.class);
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {
String[] configBeans = beanFactory.getBeanNamesForAnnotation(Configuration.class);
log.info("=== Registered @Configuration Classes ===");
for (String name : configBeans) {
Object configClass = beanFactory.getBeanDefinition(name).getBeanClassName();
log.info("Config Bean: {} -> {}", name, configClass);
}
}
}
Feature Description
Currently, users relies on
--debugflag to diagnose complex Spring Boot configuration precedence, condition evaluations, and auto-configurations. It can print out positive and negative condition matches (e.g.,@ConditionalOnClass,@ConditionalOnMissingBean) for auto-configuration classes. It explains why a configuration evaluated to true or false, but not which parent configuration or@Importchain pulled it into the context.There is no native way to visualize the actual configuration class import tree (i.e., showing how
@Configurationclasses,@Importselectors, inner configurations, and auto-configurations trigger one another hierarchically) directly during application startup.Adding an optional configuration tree logger would make debugging configuration precedence, custom starter ordering, and bean initialization issues significantly easier.
Motivation / Use Case
When building large modular applications or custom Spring Boot starters, developer issues often stem from:
@Import/@ImportSelector/@ImportResourceannotations.@AutoConfigureBefore, and@AutoConfigureAfter.Proposed Implementation
Implementing this feature is straightforward, as a dedicated logger or tree printer can run during the
BeanFactoryPostProcessororApplicationListenerphase to provide instant visual insight into the configuration structure during startup without extra endpoint queries.Sample code