Это связано с функцией автоматической настройки SpringBoot , которая автоматически создает бин динамически на основе различных условий , например, если библиотека может быть найдена по путям классов или еслиразработчики уже определяют bean-компонент определенного типа и т. д. *
Если вы включите режим отладки, введя debug=true
в application.properties
, во время запуска приложения будет напечатан отчет о том, какие bean-компоненты являются автоматическими.создан из-за каких условий.
В примере с spring-boot-starter-thymeleaf
вы можете найти в отчете следующее:
ThymeleafAutoConfiguration.ThymeleafWebMvcConfiguration.ThymeleafViewResolverConfiguration#thymeleafViewResolver matched:
- @ConditionalOnMissingBean (names: thymeleafViewResolver; SearchStrategy: all) did not find any beans (OnBeanCondition)
И проследив исходные коды ThymeleafViewResolverConfiguration
:
@Bean
@ConditionalOnMissingBean(name = "thymeleafViewResolver")
public ThymeleafViewResolver thymeleafViewResolver() {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(this.templateEngine);
resolver.setCharacterEncoding(this.properties.getEncoding().name());
//.......
return resolver;
}
Вы можете узнать, что thymeleafViewResolver
относится к типу ThymeleafViewResolver
, а @ConditionalOnMissingBean
здесь означает, что этот компонент будет создан, только если нет компонентаThymeleafViewResolver
тип еще определен.