Как Spring Boot помещает средство разрешения представления Thymeleaf в свой контейнер компонентов - PullRequest
0 голосов
/ 10 июня 2019

Это весенний загрузочный проект, и веб-страница отображается Thymeleaf. Когда я помещаю spring-boot-starter-thymeleaf в pom.xml и запускаю приложение, оно пытается найти все bean-компоненты, реализующие ViewResolver, в своем контейнере. И вы видите здесь, что он находит thymeleafViewResolver.

Мне просто любопытно, когда и как Spring загружает этот класс ThymeleafViewResolver в свой контейнер bean-компонентов?

enter image description here

1 Ответ

2 голосов
/ 10 июня 2019

Это связано с функцией автоматической настройки 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 тип еще определен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...