Найти тему
Software development

Spring Boot. Основы. Теория #6

За последние несколько лет, из-за наращивания дополнительной функциональности, структура фреймворка Spring стала заметно сложнее. Теперь, чтобы начать новый Spring-проект, требуется длительная процедура подготовки, связанная с его настройкой. Чтобы сэкономить время и избежать конфигурирования данного фреймворка каждый раз с нуля, был придуман Spring Boot. Он использует Spring, как основу для своей работы.

Одной из основных особенностей Spring Framework является использование паттерна Dependency Injection (DI, внедрение зависимостей) и Inversion of Control (Ioc, инверсия управления). DI помогает намного проще реализовывать необходимую приложениям функциональность, а также позволяет разрабатывать слабо связанные классы, делая их более универсальными. Ioc позволяет нам не отвлекаться на создание объектов и управлением их жизненным циклом, а лишь конфигурируем объекты и "объясняем" какие объекты и как создать.

Автоконфигурация — это особенность Spring Boot. При помощи аннотаций он автоматически настраивает специальные конфигурационные классы.

Еще важное преимущество Spring Boot - не требует развертывания war-файлов, а помогает напрямую встроить в приложение Tomcat, Jetty (контейнер сервлетов).

Чтобы ускорить процесс управления зависимостями, Spring Boot неявно упаковывает необходимые сторонние зависимости для каждого типа приложения на основе Spring и предоставляет их разработчику посредством так называемых starter-пакетов (spring-boot-starter-web, spring-boot-starter-data-jpa и т.д.).

Все приложения Spring Boot конфигурируются от spring-boot-starter-parent.

Ранее мы создали проект с одним контроллером. Добавив один starter: Spring-boot-starter-web мы получили все необходимое для запуска минимального рабочего web-приложения - Spring Boot автоматически сконфигурирует такие зарегистрированные бины, как DispatcherServlet, ResourceHandlers, MessageSource.

Каждое Spring Boot приложение имеет точку входа - это класс обозначенный аннотацией @SpringBootApplication и содержащий статический метод main.

-2

Все зависимости находятся в файле pom.xml (если в качестве сборщика мы используем maven).

У spring приложения есть ApplicationContext. Сейчас не будем углубляться в это понятие. Сейчас нам достаточно знать, что контекст предоставляет нам фабричные методы бина для доступа к компонентам приложения.

Ключевое понятие для нас на текущем этапе - @Bean (бин).

Создадим класс Dog и добавим в него один метод, который возвращает имя.

-3

Создадим класс Config как показано ниже:

-4

Теперь у нас есть бин - Dog. Его за нас будет создавfть spring и мы можем "инжектить" его в другие компоненты c помощью аннотации @Autowired. Например в наш контроллер:

-5

Есть еще несколько способов получить бин, но об этом позже.

Также есть аннотация @Component. Основное отличие от @Bean - ею мы аннотируем не метод, а класс. Для ее работы необходима аннотация @ComponentScan. Но т.к. мы используем @SpringBootApplication - она уже содержит ее.

Теперь мы можем еще сократить наш код:

-6

Класс config можно удалить. В контроллере никаких изменений делать не нужно.

Разница между аннотациями @Bean и @Component в том, что @Bean более гибкая аннотация, ею мы аннотируем метод, а не класс:

  • С помощью @Bean можно конфигурировать бины для тех классов, код которых вы не можете редактировать, например, классы из чужих библиотек.
  • С помощью @Bean можно также конфигурировать классы, создаваемые фабричными методами.

На последок еще добавлю: @RestController тоже является @Component.

На этом у меня все. В следующих статьях или видео будем писать более "серьезное" приложение.

Ссылка на видео: