Це перша частина серії уроків і практичних проєктів для вивчення Spring Boot.
“Скажи мені, і я забуду. Навчи мене, і я запам’ятаю. Залучай мене, і я навчуся”
У цій серії ми разом будемо вивчати Spring Boot, починаючи з основ і відповідаючи на питання Чому.
Перше чому — що таке Spring та Spring Boot у Java?
- Spring — це популярний, легкий фреймворк для створення Java додатків. Класний факт про Spring полягає в тому, що він має модульну архітектуру.
- Spring має окремі модулі для основного фреймворка (Spring Core, Spring Beans, Spring Context), доступу до даних (Spring JDBC, Spring ORM, Spring Data), веб-шару (Spring Web, Spring MVC) тощо.
- Таким чином, розробники можуть використовувати лише необхідні модулі/компоненти з Spring, а не весь фреймворк.
- Spring Boot — це фреймворк, який побудований поверх Spring і ще більше спрощує процес створення, налаштування та розгортання Spring додатків. Коли ми говоримо про спрощення, маємо на увазі такі функції, як простіша конфігурація (автоматично налаштовує компоненти на основі доданих бібліотек), вбудовані сервери (вбудовані веб-сервери, такі як Tomcat) та багато іншого.
Тепер, коли ми знаємо деякі причини для використання Spring Boot, давайте перейдемо до створення нашого першого веб-сервера. Так, ви правильно почули!
Спочатку потрібно встановити Java та Maven. І Spring пропонує зручний веб-інструмент, Spring Initializer, який допомагає з шаблонним кодом для створення будь-якого Spring проєкту. Після того як ініціалізований код завантажено як zip-архів, відкрийте його в будь-якому IDE.
Важливо приділити хвилину, щоб переглянути структуру директорій типової програми Spring Boot.
src
├── main
│ ├── java
│ │ └── com.example.demo
│ │ ├── DemoApplication.java <-- Головний клас
│ │ ├── controllers <-- Контролери (Веб-шар)
│ │ ├── services <-- Сервіси (Шар бізнес-логіки)
│ │ └── repositories <-- Репозиторії (Шар доступу до даних)
│ ├── resources
│ ├── application.properties <-- Файл конфігурації
│ ├── static <-- Статичні файли (наприклад, HTML, CSS, JS)
│ ├── templates <-- Шаблони Thymeleaf (якщо використовуються)
│ └── schema.sql/data.sql <-- SQL скрипти (необов'язково)
└── test
└── java
└── com.example.demo <-- Тестові класи
- Головний клас
package com.example.demo.Controller;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
- Це точка входу для будь-якої програми Spring Boot. У нашому прикладі це буде клас DemoApplication.java.
- Анотація
@SpringBootApplication
є комбінацією трьох анотацій нижче. @Configuration
: Маркує клас як джерело визначень Bean. Bean в Spring можна вважати екземпляром (або об’єктом) класу, але з важливою відмінністю: його життєвий цикл та залежності керуються Spring, а не безпосередньо ініціалізуються або контролюються розробником.@EnableAutoConfiguration
: Увімкнює функцію автоматичної конфігурації Spring Boot, щоб, коли ми додаємо бібліотеки, Spring автоматично створює та налаштовує необхідні компоненти.@ComponentScan
: Автоматично сканує компоненти, конфігурації та сервіси в поточному пакеті та підпакетах.- Метод
SpringApplication.run()
ініціалізує Spring Context та запускає додаток, запускаючи будь-які вбудовані веб-сервери, такі як Tomcat.
Spring Context можна уявити як основну частину будь-якої програми Spring, відповідальну за управління Bean (об'єктами) і їх залежностями, а також за виконання функції моста між додатком і його конфігурацією.
2. Контролер (Controller) Шар
- Це шар, який безпосередньо взаємодіє з HTTP запитами користувача і повертає відповіді. Насправді, давайте створимо наш перший приклад ендпоінта прямо зараз!
- Спочатку додайте залежність Spring-Web в секцію залежностей файлу конфігурації pom.xml.
org.springframework.boot
spring-boot-starter-web
- Потім додайте наступний код в новий клас Controller під назвою HelloController. Анотація
@RestController
використовується для створення RESTful API і поєднує анотації@Controller
і@ResponseBody
. Це дозволяє класу виступати як контролер, який обробляє HTTP запити і одночасно повертає дані безпосередньо в тілі відповіді.
package com.example.demo.controllers;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, Spring Boot!";
}
}
3. Сервіс (Service) Шар
- Обробляє код для бізнес-логіки. Для нашого простого прикладу нам достатньо лише контролерного шару, і ми не потребуємо бізнес-логіки. Тому ми повернемося до цієї частини пізніше в серії.
4. Репозиторій (Repository) Шар
- Відповідає за збереження даних і взаємодію з базою даних.
5. Модель (Model) Шар
- Визначає структуру даних і сутностей. Це також буде розглянуто пізніше в серії.
Досить теорії на зараз. Ви можете запустити додаток одним з методів нижче.
- Безпосередньо запустити, використовуючи кнопку запуску в IDE.
- Запустити додаток через командний рядок за допомогою Maven, без побудови коду.
mvn spring-boot:run
- Побудувати код і запустити jar за допомогою Java. (Побудований jar буде знаходитися в папці target)
mvn clean install
java -jar target/demo-0.0.1-SNAPSHOT.jar
Нарешті, коли додаток буде працювати на порту 8080 як сервер Tomcat, ви можете викликати ендпоінт і отримати відповідь API.
Використовуйте командний рядок, як показано нижче.
curl http://localhost:8080/hello
Або, якщо хочете виглядати креативно, відкрийте браузер і перейдіть за URL http://localhost:8080/hello. І ви побачите бажану відповідь також у вікні браузера.
Це все для першого уроку!
Перекладено з: A Practical Guide to Learn Spring Boot