Как анализировать модули и структуру исходного кода SpringBoot? Исходный код SpringBoot (2)

Spring Boot
Как анализировать модули и структуру исходного кода SpringBoot? Исходный код SpringBoot (2)

Примечание. Эта версия анализа исходного кода соответствует SpringBoot2.1.0.RELEASE

1. Введение

Эта статья продолжаетКак создать собственную среду отладки исходного кода SpringBoot? --Исходный код SpringBoot (1).

После настройки собственной локальной среды отладки исходного кода SpringBoot нам не следует сейчас торопиться с подробностями отладки конкретного исходного кода.В начале чтения исходного кода мы должны иметь общее представление о структуре проекта и т. д., а затем анализировать и отлаживать исходный код.. Я рекомендую прочитать то, что я написал ранееКак мы начинаем анализировать исходный код проектов с открытым исходным кодом?Одна статья, полная галантереи.

2 Список исходных модулей SpringBoot

Давайте сначала получим общее представление о модуле исходного кода SpringBoot, как показано ниже:

Как видно из рисунка выше, в основном это следующие четыре модуля:

  • spring-boot-project: В этом модуле реализованы все функции всего фреймворка SpringBoot, здесь реализовано 95% кода проекта SpringBoot, а всего исходный код насчитывает около 250 000 строк.
  • Spring-boot-samples: Это преимущество, предоставляемое SpringBoot друзьям. Оно содержит множество простых демонстраций с использованием SpringBoot. Мы можем в полной мере использовать этот модуль при отладке и чтении исходного кода.
  • Spring-boot-sample-invoker: Этот модуль должен быть связан с модулем Sample, обратите внимание на корень Pom.xml:Samples are built via the invoker plugin, модуль не имеет кода.
  • Spring-boot-tests: этот модуль Тестовый модуль SpringBoot связан с тестированием развертывания и интеграционным тестированием.

Поскольку все функции SpringBoot реализованы в модуле spring-boot-project, далее основное внимание уделяется введению модуля spring-boot-project.

3 Подробное объяснение модуля исходного кода spring-boot-project

Давайте сначала посмотрим на общую структуру модуля spring-boot-project, как показано на рисунке ниже, а затем мы представим их один за другим:

1) spring-boot-parent

Этот модуль не имеет кода и является родительским проектом модуля spring-boot, который наследуется другими подмодулями.

2) spring-boot

Этот модуль является ядром проекта SpringBoot.Можно сказать, что здесь реализованы некоторые базовые функции ядра, обеспечивающие поддержку других функций компонентов модуля SpringBoot, включая следующие основные функции:

  • SpringApplicationкласс, это класс запуска SpringBoot, который предоставляет статическийrunметод для запуска программы, этот класс в основном используется для создания и обновления контейнера Spring.ApplicationContext.
  • Он поддерживает выбор различных контейнеров, таких как Tomcat, Jetty и т. д., в качестве встроенного контейнера приложения, что является одной из новых функций SpringBoot.
  • Поддержка внешней конфигурации, это относится к нашей реализацииjava -jar xxx.jarКоманды могут принимать некоторые параметры, такие как выполнениеjava -jar demo.jar --server.port=8888изменить порт приложения на 8888.
  • Этот модуль имеет встроенные события жизненного цикла запуска SpringBoot и некоторые инициализаторы контейнеров (ApplicationContextинициализаторы), чтобы выполнить некоторую логику инициализации при запуске SpringBoot.

3) spring-boot-autoconfigure

Этот модуль связан с автоматической настройкой SpringBoot и является одной из новых функций SpringBoot. Например, SpringBoot может автоматически настроить модуль проекта на основе пути к классам.Наиболее важной аннотацией для автоматической настройки является@EnableAutoConfiguration, эта аннотация может инициировать автоматическую настройку контекста Spring. Еще одно важное замечание заключается в том, что@Conditional.

Возьми каштан, еслиHSQLDBВ пути к классам проекта, и мы не настроили никаких других подключений к базе данных, автоматическая настройка автоматически создаст соответствующую базу данных в соответствии с путем к классам.bean.

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

4) spring-boot-starters

Этот модуль связан с начальными зависимостями SpringBoot и является одной из новых функций SpringBoot. SpringBoot снижает сложность зависимостей проекта, предоставляя множество начальных зависимостей. Начальная зависимость фактически заключается в использовании модели проекта maven для агрегирования других связанных зависимостей, и определяются номера версий различных зависимостей, чтобы избежать различных конфликтов версий, когда пользователи вводят зависимости, что нам удобно использовать.

Например, когда мы используем activemq, мы можем прямо представить его в это время.spring-boot-starter-activemqНачальных зависимостей достаточно.Если официальный сайт SpringBoot или сторонняя организация не предоставляют соответствующие стартовые зависимости SpringBoot, мы можем настроить наши собственные стартовые зависимости в это время.

Обратите внимание, что этот модуль не имеет кода, в основном через pom.xml maven для организации различных зависимостей.

5) spring-boot-cli

Spring Boot CLI — это инструмент командной строки, который вы можете использовать, если хотите быстро разрабатывать с помощью Spring. Он позволяет запускать скрипты Groovy, что означает, что у вас есть знакомый синтаксис, подобный Java, без большого количества шаблонного кода. Вы также можете запустить новый проект или написать свои собственные команды.

6) spring-boot-actuator

Это связано с мониторингом SpringBoot и является одной из новых функций SpringBoot. Приложениями можно управлять и отслеживать их через конечные точки HTTP или JMX и т. д. Аудит, сбор данных о работоспособности и показателей могут автоматически применяться к приложениям. Этот модуль мониторинга доступен из коробки и предоставляет ряд конечных точек, включаяHealthEndpoint, EnvironmentEndpointиBeansEndpointи т.д. конечные точки.

7) spring-boot-actuator-autoconfigure

Этот модуль обеспечивает автоматическую настройку модулей мониторинга, обычно основанную на пути к классам. НапримерMicrometerсуществует в пути к классам, то он будет автоматически настроенMetricsEndpoint.

8) spring-boot-test

Этот режим представляет собой тестовый модуль spring-boot, который содержит некоторые основные классы и аннотации, которые помогают нам тестировать (например,@SpringBootTest).

9) spring-boot-dependencies

Этот модуль также нет кода, в основном связанный с определением зависимостей Maven и их версий некоторых из Springboot.

10) spring-boot-devtools

Этот модуль относится к горячему развертыванию SpringBoot, то есть вступает в силу без перезапуска приложения после модификации кода.

11) spring-boot-docs

Этот модуль должен быть модулем, связанным с документацией.

12) spring-boot-properties-migrator

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

13) spring-boot-test-autoconfigure

На первый взгляд, этот модуль связан с автоматической настройкой тестов SpringBoot.

14) spring-boot-tools

На первый взгляд, этот модуль представляет собой инструментальный модуль SpringBoot, который обеспечивает поддержку загрузки, подключаемых модулей maven, метаданных и постобработки.

Введен подмодуль при стольких весенних модулях. Не паникуйте, мы должны интерпретировать модуль, мы действительно хотим увидеть модули.spring-boot,spring-boot-autoconfigure,spring-boot-startersиspring-boot-actuatorмодуль.

4 Используйте интеллект-карту, чтобы обобщить контекст проекта исходного кода SpringBoot.

5 Подробное объяснение отношения pom между модулями SpringBoot

Конкретные функции каждого модуля SpringBoot были выяснены ранее, а пока давайте посмотрим на взаимосвязь между poms модуля SpringBoot, поскольку проект построен через maven, изучить эту взаимосвязь все же необходимо.

Сначала взгляните на отношение pom проекта исходного кода SpringBoot, как показано ниже:

Из вышеприведенного рисунка можно сделать следующие выводы:

  • spring-boot-build(pom.xml)является корневым pom проекта, а его дочерние pom имеютspring-boot-project(pom.xml)иspring-boot-dependencies(pom.xml);
  • spring-boot-dependencies(pom.xml)В основном определяет различные зависимости и версии проекта SpringBoot, а его подпрограммы имеютspring-boot-parent(pom.xml)иspring-boot-starter-parent(pom.xml);
  • spring-boot-project(pom.xml)Он действует как модуль полимеризации, который не наследует его подмодуль, а наследуетspring-boot-parent(pom.xml);
  • spring-boot-parent(pom.xml)даspring-boot-project(pom.xml)Дочерний модуль , но унаследованный родительский модульspring-boot-dependencies(pom.xml), который определяет некоторые свойства и другие связанные вещи. Его дочерний помпонspring-boot-project(pom.xml)подмодуль (обратите внимание на удалениеspring-boot-dependencies(pom.xml)), Такие какspring-boot(pom.xml),spring-boot-starters(pom.xml)иspring-boot-actuator(pom.xml)Ждать;
  • spring-boot-starters(pom.xml)является родительским pom всех конкретных зависимостей запуска, а его дочерний pom имеетspring-boot-starter-data-jdbc(pom.xml)иspring-boot-starter-data-redis(pom.xml)Ждать.
  • spring-boot-starter-parent(pom.xml), является родительским pom для всех наших конкретных проектов SpringBoot, таких как образцы, поставляемые с SpringBoot.spring-boot-samples(pom.xml)наследуется от него.

Пом взаимосвязь между модулями SpringBoot немного сложная, немного вокруг, если чтение и интерпретация картинки выше не понятна, предлагаю небольшим партнерам открыть собственную идею проекта, один за другим погладить его. Короче говоря, помните, что некоторые родительские помпы SpringBoot не что иное, как управление версиями, агрегация между модулями.

6 Резюме

Что ж, взаимосвязь между функциями каждого модуля исходного кода проекта SpringBoot и взаимосвязь между модулем pom была выяснена.Короче говоря, очень важно иметь общее представление об исходном коде проекта в начале анализа .

Изначально я хотел написать анализ процесса запуска SpringBoot в следующем разделе, но поскольку я изучал процесс запуска раньше, я поместил анализ процесса запуска и написал его позже. В следующем разделе начнем с новой функции SpringBoot — исходного кода автоматической настройки, так что давайте сначала раскроем тайну автоматической настройки SpringBoot в следующем разделе, хе-хе🤭.

уведомление о следующем разделе: Соответствующие принципы автоматической настройки SpringBoot

Оригинальность не так проста, пожалуйста, дайте мне лайк!

Ссылаться на:

1,GitHub.com/spring-pro — это…

2,docs.spring.IO/весенняя загрузка…