Часто задаваемые вопросы на собеседовании — пожалуйста, расскажите о принципе автоматической сборки Springboot!

Spring Boot Java
Часто задаваемые вопросы на собеседовании — пожалуйста, расскажите о принципе автоматической сборки Springboot!

Это второй день моего участия в августовском испытании обновлений.Подробности о событии смотрите:​Испытание августовского обновления

С появлением 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Эта аннотация, нажмите на исходный код, чтобы увидеть конкретную реализацию.

image.png

По информации на рисунке видно, что аннотация SpringBootApplication является составной аннотацией.

SpringBootConfigurationАннотация может быть незнакомой, но для@ConfigurationЕсли он будет аннотирован, то точно не будет;ComponentScanЭто также аннотация сканирования, которую мы часто используем в проектах Spring.

главное сказать@EnableAutoConfigurationАннотацию, автоматическую аннотацию конфигурации, также можно назвать автоматической сборкой, поскольку мы хотим говорить о принципе автоматической сборки, то есть говорить о@EnableAutoConfigurationКонкретную реализацию аннотации рассмотрим ниже.

Включить аннотацию автоматической настройки @EnableAutoConfiguration

Взгляните на реализацию исходного кода этой аннотации, как показано ниже.

image.png

В этой реализации аннотации начните с аннотации AutoConfiguration.

Кратко расскажите об аннотациях выше.Если вы написали пользовательские аннотации, вы можете хорошо различать эти понятия.

@Target({ElementType.TYPE}) : 用于声明注解作用范围,TYPE表示:可用来修饰接口、类、枚举、注解;还有其他的枚举类型,如果有兴趣可以去自行搜索一下。

@Retention(RetentionPolicy.RUNTIME) :用于声明注解的生命周期,RUNTIME表示:在运行时有效。

@Documented :用于声明注解文档化,如果被此注解修饰,就可以用javadoc进行记录,成为了一个公共的API。

@Inherited :用于加强继承效果。

Вернемся к теме, продолжайте.

Аннотация AutoConfiguration также не является аннотацией, реализующей автоматическую сборку, в Spring эта аннотация используется для сканирования аннотаций, таких как классы сущностей Entity.

Аннотация импорта является ядром автоматической сборки, продолжайте углубляться.

Импорт аннотацийAutoConfigurationImportSelectorclass, и автоматическая сборка также реализована в этом классе.

AutoConfigurationImportSelectorВ классе реализовано множество методов, а реализация автоматической сборки находится в методе selectImports, как показано на рисунке.

image.png

Читая исходный код, естьgetCandidateConfigurationsметод, введите, чтобы увидеть ситуацию с кодом.

image.png

Здесь есть утверждение, что означает, что файл spring.factories не может быть найден правильно, и результат закономерен.Этот метод заключается в загрузке файла spring.factories.Давайте узнаем, что находится в этом файле.

Найдите через кнопку позиционирования текущего класса в IDEA,

image.png

Файл можно найти здесь, как показано на рисунке:

image.png

Содержимое файла следующее:

image.png

Видно, что через метод selectImports получается ряд имен классов под файлом, а затем эти классы автоматически загружаются в IOC-контейнер.

Эти классы относятся к классам с автоматической настройкой внутри, и также можно обнаружить, что имена этих классов заканчиваются на AutoConfiguration.

Суммировать

Доработан принцип автоматической сборки, если подытожить, то это загрузить метод selectImports в классе AutoConfigurationImportSelector через аннотацию @EnableAutoConfiguration, а затем просканировать класс автоматической конфигурации под файлом spring.factories под MATE-INF и собрать его в контейнер IOC.