Эта лекция посвящена основному техническому принципу Spring Boot — автоконфигурации. Шаг за шагом прочесывая исходный код, связанный с автоматической настройкой Spring Boot, раскрывается тайна автоматической настройки Spring Boot.
1. Основное содержание
Благодаря этой лекции вы сможете найти конкретные ответы на следующие вопросы:
- Что такое автоматизированная конфигурация?
- Зачем нужна автоматическая настройка?
- Как осуществляется автоматическая настройка?
- Как отлаживать конфигурацию автоматизации?
2. Зачем вам автоматическая настройка
В обычном приложении Spring есть много файлов конфигурации, нам нужно настроить эти файлы вручную, например, настроить сканирование компонентов, настроить сервлет, настроить парсер представления, настроить кодировку http и т. д. Вот пример настройки http кодировки Нам нужно настроить аналогичный фильтр в файле web.xml:
Следующий код показывает нам классический способ настройки сервлета:
Если мы используем Hibernate/JPA в нашем проекте, нам также необходимо настроить такие вещи, как источники данных, bean-фабрики и менеджеры транзакций.
Приведенную выше конфигурацию можно рассматривать как классический случай приложения Spring, но теперь, похоже, вы чувствуете усталость? Регулярная конфигурация позволяет разработчикам тратить больше опыта на файлы конфигурации. И эти конфигурации являются некоторыми методами конфигурации с фиксированным режимом, и даже многие из них являются кодами шаблонов.Если это так, есть ли возможность позволить Spring автоматически завершать эти конфигурации шаблонов? Ответ — да, это исходное намерение Spring Boot AutoConfiguration. Освободите разработчиков от тяжелой работы по настройке, и эти утомительные детали настройки оставлены для завершения Spring Boot.Если нам нужно предоставить наши собственные параметры конфигурации, нам нужно только переопределить автоматически настроенные параметры. Теперь это кажется интересным?
3. Основной принцип автоматической настройки Spring Boot
Исходный код Spring Boot для автоматической настройки можно найти в пакете spring-boot-autoconfigure-2.x.x.x.jar/spring-boot-autoconfigure-1.x.x.x.jar. В пакете org.springframework.boot.autoconfigure предоставляется следующий исходный код автоматической настройки:
Если вы хотите узнать больше об автоматической настройке Spring Boot, вы можете просмотреть конкретный исходный код здесь.
В пакете spring-boot-autoconfigure.jar также есть важный файл, который является ключом к реализации автоматической настройки Spring Boot. Файл /META-INFO/spring.factories. В этом файле перечислены все модули, которые могут быть автоматически настроены Spring Boot, Некоторые из них перечислены ниже для справки:
4. Отладка автоконфигурации
Существует три способа отладки и просмотра информации об автоматической настройке, например, какие компоненты автоматически настраиваются в текущем проекте, какие компоненты не настраиваются автоматически и почему.
-
Запустив проект в виде java -jar [jarfile] --debug, вы можете просмотреть соответствующую информацию об автоматической настройке.
-
Включите ведение журнала отладки для проекта. Добавьте уровень ведения журнала для пакета org.springframework в файле application.properties какDEBUG :
logging.level.org.springframework:DEBUG
-
Добавьте в проект две зависимости spring-boot-starter-actuator и spring-data-rest-hal-browser:
При использовании метода 1 и метода 2, когда мы перезапускаем приложение, вы можете найти в консоли автоматически настроенный отчет, который включает в себя информацию о компонентах, которые настраиваются автоматически, и о компонентах, которые не настраиваются автоматически, а также соответствующая информация.
Если вы используете третий способ, после перезапуска проекта введите http://localhost:8080/actuator/# в адресной строке браузера.http://localhost:8080/autoconfig, вы получите следующее сообщение:
5 Основной принцип автоматической настройки Spring Boot
В приложении Spring Boot все операции происходят из аннотации @SpringBootApplication, которая открывает двери для запуска программ. Эта аннотация является составной аннотацией, основная функциональность которой обеспечивается аннотацией @EnableAutoConfiguration. Теперь давайте посмотрим на исходный код аннотаций @SpringBootApplication и @EnableAutoConfiguration.
В классе аннотаций SpringBootApplication основное место занимает аннотация **@EnableAutoConfiguration** на рис. 1 выше, которая вносит большую часть функций в класс аннотаций @SpringBootApplication. Давайте посмотрим на исходный код аннотации @Enableautoconfiguration:
Наиболее важной частью здесь является функция автоматической настройки, импортируемая аннотацией @Import.EnableConfigurationImportSelector сканирует информацию о пакете jar, настроенную в файле /META-INF/spring.factories в файле spring-boot-autoconfigure.jar, через SpringFactoriesLoader.loadFactoryNames. () , это важность упомянутого в начале файла spring.factories. Мы можем взглянуть на соответствующий код в классе EnableConfigurationImportSelector:
6. Пример разбора автоматической настройки
Пакет org.springframework.boot.autoconfigure уже предоставляет множество классов автоконфигурации.Дальше давайте возьмем DataSourceAutoConfiguration в качестве примера, чтобы увидеть детали конфигурации. Как правило, все классы автоконфигурации смотрят на другие классы, доступные в пути к классам. Если в пути к классам есть определенный класс, конфигурация, которая включает эту функцию с помощью автоматической настройки. Чтобы определить, есть ли что-то конкретное в пути к классам, это делается с помощью условных аннотаций в пакете org.springframework.boot.autoconfigure.condition, Вот несколько часто используемых условных аннотаций:
- @ConditionalOnBean: когда контейнер имеет указанное условие Bean
- @ConditionalOnClass: когда в пути к классам есть указанный класс
- @ConditionalOnMissingBean: когда в контейнере не указан bean-компонент
- @ConditionalOnMissingClass: когда в пути к классам нет указанного класса
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
: эта конфигурация включена, только если эти классы находятся в пути к классам.
@ConditionalOnMissingBean
: настраивайте этот bean-компонент только в том случае, если никакие другие bean-компоненты не настроены с таким же именем.
7. Заключение
В приведенном выше содержании кратко разбирается общий принцип автоматической настройки Spring Boot, и одновременно даются ответы на 4 вопроса, поставленных в начале. Появление Spring Boot должно повысить эффективность нашей разработки.Нам нужно понять его основные базовые принципы, но он не должен быть похищен фреймворком или технологией в любой момент.Важнее изучить его базовые принципы, а не сам фреймворк. . Основываясь на этой отправной точке, в следующей лекции мы реализуем собственный Spring Boot Starter и предоставим возможность автоматизировать настройку. Тогда этот контент здесь, спасибо~~