Это второй день моего участия в августовском испытании обновлений.Подробности о событии смотрите:Испытание августовского обновления
С появлением 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.
Аннотация импорта является ядром автоматической сборки, продолжайте углубляться.
Импорт аннотацийAutoConfigurationImportSelector
class, и автоматическая сборка также реализована в этом классе.
AutoConfigurationImportSelector
В классе реализовано множество методов, а реализация автоматической сборки находится в методе selectImports, как показано на рисунке.
Читая исходный код, естьgetCandidateConfigurations
метод, введите, чтобы увидеть ситуацию с кодом.
Здесь есть утверждение, что означает, что файл spring.factories не может быть найден правильно, и результат закономерен.Этот метод заключается в загрузке файла spring.factories.Давайте узнаем, что находится в этом файле.
Найдите через кнопку позиционирования текущего класса в IDEA,
Файл можно найти здесь, как показано на рисунке:
Содержимое файла следующее:
Видно, что через метод selectImports получается ряд имен классов под файлом, а затем эти классы автоматически загружаются в IOC-контейнер.
Эти классы относятся к классам с автоматической настройкой внутри, и также можно обнаружить, что имена этих классов заканчиваются на AutoConfiguration.
Суммировать
Доработан принцип автоматической сборки, если подытожить, то это загрузить метод selectImports в классе AutoConfigurationImportSelector через аннотацию @EnableAutoConfiguration, а затем просканировать класс автоматической конфигурации под файлом spring.factories под MATE-INF и собрать его в контейнер IOC.