1. Предисловие
Я некоторое время изучаю весенний ботинок. Я организую свое исследование и поделюсь им с вами недавно. Будет от 10 до 20 блогов. Вся серия будет основана на простой системе блога, потому что ее не очень легко понять, просто говоря о теории, и если вы не можете систематически понять некоторые точки знаний каждый раз с помощью простой мини -программы, поэтому на основе простой системы давайте посмотрим, как реализовать полную систему через Spring Boot. В дополнение к основным моментам знаний Spring Boot, эта серия также включает в себя комбинацию Spring Boot с базой данных, кэширование (REDIS), очереди сообщений и т. Д., А также развертывание с несколькими инстанциями. Заинтересованные студенты могут обратить внимание.
2. Введение в Spring Boot
Spring Boot можно увидеть с названия, что он основан на весне, поэтому студенты, которые не знакомы с весной, должны сначала узнать о весне. Во -вторых, Spring Boot помогает нам интегрировать многие часто используемые функции, что делает всю конфигурацию проще. Студенты, которые использовали Spring, должны знать, что, хотя Spring усердно работала, чтобы уменьшить сложность конфигурации, все еще довольно трудно настроить полностью доступную (веб -) среду, такую как настройка журналов, базы данных, кэши и т. Д., Затем настройка Tomcat и, наконец, опубликовать программу в каталог Tomcat. Spring Boot значительно упростил этот процесс. Он предоставляет много стартеров, просто представьте соответствующий пакет JAR. Например, нам нужно интегрировать Tomcat, просто представить стартер Tomcat:
<segeply> <groupid> org.springframework.boot </GroupId> <artifactId> Spring-Boot-Starter-tomcat </artifactid> </dependency>
Примечание. Примеры в этой статье основаны на Maven, поэтому, если вы не знакомы с Maven, вы можете сначала увидеть, как его использовать. Если вы знакомы с Gradle, вы также можете внести соответствующие корректировки на конфигурацию в соответствии с ситуацией.
Мы можем просмотреть стартер, предоставленную Spring Boot из официальной документации:
Здесь я перехватил только небольшую часть, и вы можете видеть, что Spring Boot поддерживает кэширование, переработку партии, MQ, ES и т. Д. Для полного списка см. Официальную документацию. Я не буду объяснять больше. Я объясню всю функцию Spring Boot с помощью примеров. Давайте сначала посмотрим на Spring Boot, чтобы реализовать веб -версию Hello World!
3. Hello World Program
3.1 Hello World исходный код
Шаг 1: импортировать пакет JAR
<parent> <groupid> org.springframework.boot </GroupId> <ArtifactId> Spring-Boot-Starter-parent </artifactid> <sersive> 1.5.8.Release </version> </parent> <Dependencies> <Depective> <groupD> org.springframework.boot </GroupId> <artifactid> spring-boot-startrator-startrathrame-ramifcate. </Зависимость> </зависимости>
Шаг 2: Напишите класс контроллера
пакет com.pandy.blog; import org.springframework.steretype.controller; import org.springframework.web.bindation.nantation.requestmapping; импорт org.springframework.web.bindtation.responsebody; import java.util.hashmap Helloworld {@RequestMapping ("/hello") @Responsebody public map <string, object> hello () {map <string, object> map = new hashmap <> (); map.put ("hello", "World"); карта возврата; }}Шаг 3: Напишите класс запуска (введите библиотеку)
пакет com.pandy.blog; Импорт org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; @springbootapplicationpublic Class Application {public Static void main (String [] Args) Throws Exception {SpringApplication. }}Запустите основной метод этого класса, а затем посетите http: // localhost: 8080/hello, и вы можете увидеть следующие результаты:
Вы чувствуете себя очень счастливым? Если у вас нет ни одной строки конфигурации, вы можете запустить веб -приложение напрямую. Но вы когда -нибудь задумывались о том, как это достигнуто после счастливого? Далее мы анализируем вышеуказанную строку кода по строке. Хотя линий не так много, есть еще много вещей, которые стоит изучать и понимать.
3.2 Анализ файлов POM
Давайте начнем с файла POM, который вводит только две зависимости в файле POM. Первый-пружинный-стартер-стартер. Друзья, которые знакомы с Maven, должны знать, что Maven также может наследовать конфигурацию из исходного файла POM, как класс. Мы можем посмотреть на POM-файл Spring-Boot-Starter-Parent. Из -за проблем с пространством мы смотрим только на две части здесь. Другие вещи легче понять. Вы можете прочитать их самостоятельно. Первая часть:
Этот файл наследует еще один POM-файл, а именно с пружинами-зависимостью. Этот файл фактически содержит много банок, и его функция состоит в том, чтобы равномерно управлять версией пакета JAR, от которой зависит Spring Boot. Таким образом, вы можете увидеть позже, что при введении банок в каждый компонент нет необходимости указывать номер версии. Еще один момент, который необходимо объяснить, - это управление файлами конфигурации:
Как вы можете видеть, по умолчанию файлы в каталоге/src/main/resources будут добавлены в класс -пути в качестве файлов ресурсов. Кроме того, это место только отфильтровывает три файла: приложение*.yml, приложение*.yaml и приложение*.properties. Что означает этот фильтр? Любой, кто настроил Spring MVC, должен знать, что при настройке базы данных мы обычно настраиваем информацию о базе данных в файле свойств, а затем вводим ее в файле конфигурации пружины через форму <name = "DriverClass" = "$ {jdbc.driver}" />. Функция этого фильтра состоит в том, чтобы заменить пары значений имени, настроенные в файле конфигурации на символы $ {xxx} в файле конфигурации пружины во время компиляции, но эта функция не нужна. Даже если он не заменен, пружина может прочитать элементы конфигурации во время выполнения.
Подводя итог: роль старта-старта-старта-старта:
1) Управление пакетами JAR.
2) Управление файлами конфигурации по умолчанию.
3) Общее управление плагинами.
Фактически, из анализа того, что мы видим, что основная функция пружинного бугота-старта-родителя заключается в управлении всеми пакетами JAR, от которых зависит Spring Boot. Тем не менее, существует очевидная проблема с родительским методом. Многие компании имеют свои родительские файлы, и Maven не может настроить нескольких родителей. Что мне делать, если не используется пружина-стартер-стартер? Вам нужно импортировать пакеты JAR One One? Фактически, Spring Boot предоставляет еще один способ решить эту проблему, которая состоит в том, чтобы добавить управление зависимостями Spring Boot в свой собственный файл POM:
<Depectediancemangement> <dependencies> <dependency> <groupid> org.springframework.boot </GroupId> <artifactId> spring-boot-зависимости </artifactId> <serse> 1.5.9.Release </version> </type> </type> <cerpope> </scope> </зависимость> зависимость> зависимость> Зависимость> Зависимость> Зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> Зависимость </depervice> </depertion> </dependency> </depertion> </dependency> </degy Devility> </depertion> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </Зависимость </depervice> </depertion> </dependency> </depertion> </dependency> </degy Devility> </depertion> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </зависимость> </Зависимость </deperency> </gethyserian> </dependency> </dependency> </dependency> </deperency> </
Фактически, из приведенного выше анализа мы видим, что это также является родителем файла POM-старта-старта-старта-старта, и этот файл POM в основном управляет множеством пакетов JAR. Таким образом, после импорта, вам не нужно запустить один за другим, чтобы импортировать его. Тем не менее, в этом случае плагин в пружине-буте-старте-родителе не будет использоваться, а функция замены файла конфигурации по умолчанию больше не доступна. Однако это не имеет никакого эффекта. С одной стороны, эти функции не нужны, а с другой стороны, если необходимо, легко добавить их самостоятельно.
3.3 Анализ класса HelloWorld:
Давайте посмотрим на класс Helloworld. После использования Spring MVC вы должны знать, что этот класс не связан с Spring Boot, и бизнес -код не имеет ничего, что связано с весной. Это также принцип, к которому Весна всегда придерживалась, и она чрезвычайно инвазивна, что также является основной причиной успеха весны. В этом классе есть три аннотации, связанные с весной, а именно @Controller, @Requestmapping и @Responsebody, но эти три аннотации также предоставляются Spring MVC. Спринг -загрузки не очень много, поэтому я не буду вдаваться в подробности здесь. Если вы не очень ясны, вы можете проверить содержание Spring MVC. Основные функции трех аннотаций следующие:
3.4 Анализ класса приложений
Наконец, давайте посмотрим на класс приложений, и вы обнаружите, что в этом классе еще меньше вещей. В целом существует только одна строка полезного кода, а именно SpressApplication.Run (Application.Class, Args); Функция этого метода заключается в загрузке класса приложения. Так есть ли что -нибудь особенное в классе приложений? Вы можете посмотреть. Фактически, единственная особенная вещь в этом классе - это аннотация @springbootapplication, поэтому работа пружинного загрузки должна иметь много подключений с этой аннотацией. Мы можем посмотреть на исходный код этой аннотации:
@Target (elementType.type) @retention (artententypolicy.runtime)@Dorcomed@enhorticed@springbootconfiguration@enableautoconfiguration@componentscan (excludefilters = {@filter (type = filtertype.custom, classexcludefilder.class), @filterpe. = AutoConfigurationExcludefilter.class)}) public @Interface SpringBootApplication {Я не буду говорить о основном методе этой аннотации. Вы можете увидеть после прочтения. В основном это предоставить псевдоним для вышеуказанных аннотаций. Каждый должен знать, что первые четыре аннотации (@target (elementtype.type), @retention (harementpolicy.runtime), @documented, @inhered) упоминаются выше. Друзья, которые не знакомы с ним, взглянут на то, как JDK реализует индивидуальные аннотации. Давайте подробно объясним следующие три аннотации: @springbootconfiguration, @enableautoconfiguration, @componentscan.
Давайте сначала посмотрим на SpringbootConfiguration. Эта аннотация относительно проста, и исходный код заключается в следующем:
@Target ({elementtype.type})@hareveration (hestententypolicy.runtime)@Doctiped@ConfigurationPublic @Interface SpringBootConfiguration {}Эта аннотация только наследует @configuration. Каждый должен знать, что пружина предоставляет три способа конфигурации: (1) Конфигурация файла XML (2) Конфигурация аннотации (3) Конфигурация класса Java. @Configuration - это аннотация, используемая для идентификации класса в качестве класса конфигурации. После весны 4 конфигурация более популярна в классах Java, поэтому Spring Boot также имеет тенденцию быть таким. И из исходного кода видно, что функция SpringbootConfiguration заключается в том, чтобы идентифицировать класс как класс конфигурации.
Затем давайте посмотрим на аннотацию @enableautoconfiguration. Источник этого аннотации немного сложный. Я не буду вдаваться в подробности здесь. Я буду реализовать его в более поздней статье подробно. Позвольте мне поговорить о функции этой аннотации. Его основная функция - реализация автоматической конфигурации. Что такое автоматическая конфигурация? Spring Boot сделает некоторую автоматическую конфигурацию на основе представленного вами пакета JAR. Например, если в классе hsqldb JAR есть, Spring Boot автоматически настраивает базу данных в памяти для вас. В этом примере мы также можем видеть, что, поскольку мы представили Spring-MVC, Tomcat и другие связанные банки, Spring Boot предполагает, что вы являетесь веб-проектом, а затем автоматически выполнят некоторые конфигурации Spring MVC, такие как поддержка статических ресурсов, поддержка автоматического преобразования возвращаемых результатов в данные формата JSON и т. Д. Это результат автоматической конфигурации. Студенты, знакомые с весной, включающие* аннотации, должны быть в состоянии более легко понять это аннотацию, потому что весной много подобных аннотаций.
Наконец, давайте посмотрим на @componentscan. Эта аннотация не предоставляется Spring Boot, но предоставлена весной. Пакеты или классы, отсканированные к весне, то есть, какие пакеты и классы будут автоматически включены в управление пружинными контейнерами МОК. МОК создает эти классы в соответствии с конфигурацией.
Теперь давайте обобжим функцию аннотации SpringbootConfiguration:
1) Отметьте, что этот класс является классом конфигурации.
2) Укажите отсканированный пакет, чтобы облегчить пружинные контейнеры МОК для управления их экземпляром и жизненными циклами.
3) Автоматическая конфигурация и используйте введенный пакет JAR, чтобы угадать намерение пользователя автоматически настроить.
4. Резюме
В этой статье анализируется веб -версия Hello World, реализованную Spring Boot. В этом примере мы понимаем основные операции Spring Boot, и благодаря анализу кода на каждой строке мы имеем грубое понимание принципов пружинной загрузки. В целом, Spring Boot управляет пактами JAR равномерно, а затем автоматически настраивает их в соответствии с выбранным нами стартера. Таким образом, решает комплексную управление зависимостями и оптимизирует конфигурацию, чтобы разработчики могли больше сосредоточиться на своем бизнесе, не выполняя очень сложную конфигурационную работу. В то же время быстрый и легкий сервис Spring Boot также очень подходит для архитектуры микросервиса. Я поделюсь этим с вами, если у вас будет возможность следить за. Добро пожаловать, чтобы продолжать следовать.