32. Что такое SpringBoot? Какие у него преимущества? Как конфигурируется? Подробно

32. Что такое SpringBoot? Какие у него преимущества? Как конфигурируется? Подробно

UNKNOWN

Spring Boot - это модуль Spring-а, который предоставляет функцию RAD  для среды Spring (Rapid  Application  Development  -  Быстрая  разработка  приложений).  Он  обеспечивает  более простой  и  быстрый  способ  настройки  и  запуска  как  обычных,  так  и  веб-приложений.  Он просматривает  наши  пути  к  классам  и  настроенные  нами  бины,  делает  разумные предположения о том, чего нам не хватает, и добавляет эти элементы.

Spring  Boot    представляет  собой  комбинацию  Spring  Framework  и  встроенного контейнера сервлетов и отсутствие (или минимальное наличие) конфигурации приложения.

Ключевые особенности и преимущества Spring Boot:

  1. Простота управления зависимостями (spring-boot-starter-* в pom.xml).

Чтобы  ускорить  процесс  управления  зависимостями  Spring  Boot  неявно упаковывает необходимые сторонние зависимости для каждого типа приложения на основе Spring и предоставляет их разработчику в виде так называемых starter-пакетов. 

Starter-пакеты представляют собой набор удобных дескрипторов зависимостей, которые можно включить в свое приложение. Это позволяет получить универсальное решение для всех технологий, связанных со Spring, избавляя программиста от лишнего поиска  необходимых  зависимостей,  библиотек  и  решения  вопросов,  связанных  с конфликтом версий различных библиотек. 

Например, если вы хотите начать использовать Spring Data JPA для доступа к базе данных, просто включите в свой проект зависимость spring-boot-starter-data-jpa (вам не придется искать совместимые драйверы баз данных и библиотеки Hibernate). Если вы хотите создать Spring web-приложение, просто добавьте зависимость spring-boot-starter-web, которая подтянет в проект все библиотеки, необходимые для разработки Spring MVC-приложений, таких как spring-webmvc, jackson-json, validation-api и Tomcat.

Другими словами, Spring Boot собирает все общие зависимости и определяет их в  одном  месте,  что  позволяет  разработчикам  просто  их  использовать.  Также  при использовании Spring Boot, файл pom.xml содержит намного меньше строк, чем в Spring-приложениях.

  1. Автоматическая конфигурация.

Автоматическая  конфигурация  включается  аннотацией @EnableAutoConfiguration. (входит в состав аннотации @SpringBootApplication) После  выбора  необходимых  для  приложения  starter-пакетов  Spring  Boot попытается  автоматически  настроить  Spring-приложение  на  основе  выбранных  jar-зависимостей,  доступных  в  classpath  классов,  свойств  в  application.properties  и  т.п.

Например,  если  добавим  spring-boot-starter-web,  то  Spring  boot  автоматически сконфигурирует такие бины как DispatcherServlet, ResourceHandlers, MessageSource итд 

Автоматическая  конфигурация  работает  в  последнюю  очередь,  после регистрации пользовательских бинов и всегда отдает им приоритет. Если ваш код уже зарегистрировал бин DataSource — автоконфигурация не будет его переопределять.

  1. Встроенная поддержка сервера приложений/контейнера сервлетов (Tomcat, Jetty, итд).

Каждое  Spring  Boot  web-приложение  включает  встроенный  web-сервер.  Не  нужно беспокоиться о настройке контейнера сервлетов и развертывания приложения в нем.

Теперь  приложение  может  запускаться  само  как  исполняемый  .jar-файл  с использованием встроенного сервера.

  1. Готовые к работе функции, такие как метрики, проверки работоспособности, security и внешняя конфигурация.
  2. Инструмент CLI  (command-line  interface)  для  разработки  и  тестирования  приложения Spring Boot.
  3. Минимизация boilerplate кода (код, который должен быть включен во многих местах практически без изменений), конфигурации XML и аннотаций.

Как происходит автоконфигурация в Spring Boot:

  1. Отмечаем main класс аннотацией @SpringBootApplication (аннотация инкапсулирует в себе: 

@SpringBootConfiguration,  @ComponentScan,  @EnableAutoConfiguration),  таким  образом наличие  @SpringBootApplication  включает  сканирование  компонентов,  автоконфигурацию  и показывает  разным  компонентам  Spring  (например,  интеграционным  тестам),  что  это  Spring Boot приложение.

@SpringBootApplication

public class DemoApplication {

    public static void main(String[] args) {

        SpringApplication.run(DemoApplication.class, args);

    }

}

  1. @EnableAutoConfiguration импортирует  класс  EnableAutoConfigurationImportSelector.  Этот класс не объявляет бины сам, а использует так называемые фабрики.
  2. Класс EnableAutoConfigurationImportSelector  смотрит  в  файл  META-INF/spring.factories  и загружает  оттуда  список  значений,  которые  являются  именами  классов  (авто)конфигураций, которые Spring Boot импортирует. Т.е. аннотация @EnableAutoConfiguration просто импортирует ВСЕ (более 150) перечисленные в spring.factories конфигурации, чтобы предоставить нужные бины в контекст приложения.
  3. Каждая из этих конфигураций пытается сконфигурировать различные аспекты приложения (web, JPA, AMQP и т.д.), регистрируя нужные бины. Логика при регистрации бинов управляется набором  @ConditionalOn*  аннотаций.  Можно  указать,  чтобы  бин  создавался  при  наличии класса в classpath (@ConditionalOnClass), наличии существующего бина (@ConditionalOnBean), отсуствии бина (@ConditionalOnMissingBean) и т.п. Таким образом наличие конфигурации не значит, что бин будет создан, и в большинстве случаев конфигурация ничего делать и создавать не будет.
  4. Созданный в  итоге  AnnotationConfigEmbeddedWebApplicationContext  ищет  в  том  же  DI контейнере фабрику для запуска embedded servlet container.
  5. Servlet container запускается, приложение готово к работе!

Предыдущий вопрос: 31. Как работает Spring Security? Как сконфигурировать? Какие интерфейсы используются?

Следующий вопрос: 33. Расскажите про нововведения Spring 5

Все вопросы по теме: список

Все темы: список

Вопросы/замечания/предложения/нашли ошибку: напишите мне

Report Page