Это второй день моего участия в августовском испытании обновлений.Подробности о событии смотрите:Испытание августовского обновления
С появлением SpringBoot процесс сборки базовой системы Java стал проще, не нужно заботиться о множестве конфигурационных файлов, не нужно заботиться о таких проблемах, как конфликты версий в различных версиях пакетов на рынке, что делает SpringBoot весьма уважаемым разработчиками всеми возможными способами.
SpringBoot
В процессе собеседования вопросы интервью SpringBoot также очень часты, самые простые из нихSpringBoot有哪些核心注解?,SpringBoot如何启动?,SpringBoot中yml配置文件有什么不同之处?Подождите, это все тесты, чтобы узнать, знаете ли вы что-нибудь о SpringBoot.
Конечно, есть также некоторые подробные вопросы интервью.SpringBoot如何实现热部署?,SpringBoot如何设置服务端口号?,SpringBoot如何做到切换不同环境的配置文件?Подождите, это разные вопросы.Если интервьюер задает эти вопросы, это может быть проверка того, действительно ли вы использовали SpringBoot, или у вас есть определенная основа для проекта SpringBoot.
В дополнение к приведенным выше вопросам интервью, будет несколько вопросов, чтобы проверить, есть ли у вас более глубокие исследования SpringBoot, которые больше не ограничиваются уровнем использования, например:SpringBoot如何实现的自动装配?,SpringBoot中starter的原理?и т.п.
Сегодня мы поговорим о принципе автоматической сборки в SpringBoot.Автоматическая сборка - очень важная и очень характерная функция в SpringBoot.Давайте посмотрим.
автоматическая сборка
Начните со стартового класса
Говоря об автосвязывании в SpringBoot, мы должны начать с класса запуска SpringBoot.
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Это базовый класс запуска SpringBoot, в основном мы рассматриваемSpringBootApplicationЭта аннотация, нажмите на исходный код, чтобы увидеть конкретную реализацию.
По информации на рисунке видно, что аннотация SpringBootApplication является составной аннотацией.
SpringBootConfigurationАннотация может быть незнакомой, но для@ConfigurationЕсли он будет аннотирован, то точно не будет;ComponentScanЭто также аннотация сканирования, которую мы часто используем в проектах Spring.
главное сказать@EnableAutoConfigurationАннотацию, автоматическую аннотацию конфигурации, также можно назвать автоматической сборкой, поскольку мы хотим говорить о принципе автоматической сборки, то есть говорить о@EnableAutoConfigurationКонкретную реализацию аннотации рассмотрим ниже.
Включить аннотацию автоматической настройки @EnableAutoConfiguration
Взгляните на реализацию исходного кода этой аннотации, как показано ниже.
В этой реализации аннотации начните с аннотации AutoConfiguration.
Кратко расскажите об аннотациях выше.Если вы написали пользовательские аннотации, вы можете хорошо различать эти понятия.
@Target({ElementType.TYPE}) : 用于声明注解作用范围,TYPE表示:可用来修饰接口、类、枚举、注解;还有其他的枚举类型,如果有兴趣可以去自行搜索一下。
@Retention(RetentionPolicy.RUNTIME) :用于声明注解的生命周期,RUNTIME表示:在运行时有效。
@Documented :用于声明注解文档化,如果被此注解修饰,就可以用javadoc进行记录,成为了一个公共的API。
@Inherited :用于加强继承效果。
Вернемся к теме, продолжайте.
Аннотация AutoConfiguration также не является аннотацией, реализующей автоматическую сборку, в Spring эта аннотация используется для сканирования аннотаций, таких как классы сущностей Entity.
Аннотация импорта является ядром автоматической сборки, продолжайте углубляться.
Импорт аннотацийAutoConfigurationImportSelectorclass, и автоматическая сборка также реализована в этом классе.
AutoConfigurationImportSelectorВ классе реализовано множество методов, а реализация автоматической сборки находится в методе selectImports, как показано на рисунке.
Читая исходный код, естьgetCandidateConfigurationsметод, введите, чтобы увидеть ситуацию с кодом.
Здесь есть утверждение, что означает, что файл spring.factories не может быть найден правильно, и результат закономерен.Этот метод заключается в загрузке файла spring.factories.Давайте узнаем, что находится в этом файле.
Найдите через кнопку позиционирования текущего класса в IDEA,
Файл можно найти здесь, как показано на рисунке:
Содержимое файла следующее:
Видно, что через метод selectImports получается ряд имен классов под файлом, а затем эти классы автоматически загружаются в IOC-контейнер.
Эти классы относятся к классам с автоматической настройкой внутри, и также можно обнаружить, что имена этих классов заканчиваются на AutoConfiguration.
Суммировать
Доработан принцип автоматической сборки, если подытожить, то это загрузить метод selectImports в классе AutoConfigurationImportSelector через аннотацию @EnableAutoConfiguration, а затем просканировать класс автоматической конфигурации под файлом spring.factories под MATE-INF и собрать его в контейнер IOC.