Коли ви створюєте проєкт Spring Boot (наприклад, через Spring Initializr), на виході отримуєте заздалегідь підготовлену структуру. Це не просто хаотичний набір файлів і папок, це ретельно продуманий шаблон, який спрощує розробку і підтримку. Давайте розберемо його компоненти.
Структура проєкту
Припустимо, ми створили новий проєкт з іменем demo. Ось яку структуру проєкту ми побачимо:
demo/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/example/demo/
│ │ │ └── DemoApplication.java
│ │ ├── resources/
│ │ ├── static/
│ │ ├── templates/
│ │ ├── application.properties
│ │ └── application.yml
│ ├── test/
│ ├── java/
│ │ └── com/example/demo/
│ │ └── DemoApplicationTests.java
│ └── resources/
├── mvnw
├── mvnw.cmd
├── pom.xml
└── README.md
Давайте розберемося з цим всім.
src/main/java
Ймовірно, з цією директорією у вас проблем немає, і ви її впізнали: тут зберігається основний код вашого застосунку. Всередині папки ви знайдете структуру на основі вашого Group і Artifact ID, які ви вказали при створенні проєкту. Наприклад, якщо Group ID — com.example і Artifact ID — demo, ви отримаєте директорію com/example/demo.
Головний клас застосунку Кожен Spring Boot проєкт містить головний клас з анотацією @SpringBootApplication. У нашому випадку — це DemoApplication.java:
package com.example.demo;
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);
}
}
Насправді, це не просто «якийсь головний» клас. Цей клас:
- Запускає застосунок.
- Підключає автоконфігурацію через анотацію
@SpringBootApplication. - Виконує сканування компонентів (о, привіт,
@ComponentScan).
Як організувати код всередині src/main/java
Зазвичай код ділять на 3 шари: Controller, Service, Repository.
- Controller: відповідає за обробку HTTP-запитів.
- Service: тут живе бізнес-логіка.
- Repository: відповідає за взаємодію з базою даних.
Приклад структури:
src/main/java/com/example/demo/
├── controller/
├── service/
└── repository/
Ця структура, звісно, не обов'язкова, але вона — загальноприйнятий стандарт.
src/main/resources
Ця папка призначена для зберігання всіх нефункціональних ресурсів вашого застосунку. Якщо у вас є JSON-файли, HTML-шаблони, файли конфігурації або зображення, вони житимуть тут.
static/: тут лежать статичні ресурси, такі як файли CSS, JavaScript, зображення.templates/: ця папка містить HTML-шаблони (наприклад, якщо ви використовуєте Thymeleaf).application.propertiesабоapplication.yml: це головний файл конфігурації, в який ми вже трохи «пірнали» в попередніх лекціях.
Приклад вмісту application.properties:
server.port=8081
spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=root
spring.datasource.password=secret
Зверніть увагу: Spring автоматично підхоплює ресурси з цієї папки. Вам не потрібно писати додатковий код для їхнього завантаження — магія Spring робить усе за вас.
src/test/java
Тестування? На жаль, його не уникнути! Ця директорія — ваш найкращий друг для написання юніт-, інтеграційних та функціональних тестів.
Приклад тесту для головного класу застосунку:
package com.example.demo;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class DemoApplicationTests {
@Test
void contextLoads() {
}
}
Spring Boot автоматично конфігурує середовище для тестування, тож ви завжди можете бути впевнені у коректній роботі вашого застосунку.
Кореневі файли проєкту
На верхньому рівні структури є кілька важливих файлів:
pom.xmlабоbuild.gradle— інструмент управління залежностями (Maven або Gradle). Тут ви підключаєте бібліотеки, необхідні для роботи.mvnwіmvnw.cmd— "wrapper" для Maven. Ці файли дозволяють запускати Maven, навіть якщо він не встановлений на вашій машині.README.md— тут зазвичай пишуть інструкцію з роботи з проєктом (хоча, чесно кажучи, мало хто цим користується).
Головний клас застосунку
@SpringBootApplication — три анотації в одній
@SpringBootApplication об'єднує три анотації:
@Configuration— дозволяє використовувати клас як джерело конфігурації.@EnableAutoConfiguration— включає магічну автоконфігурацію Spring Boot.@ComponentScan— автоматично шукає компоненти, анотовані як@Component,@Service,@Repositoryі так далі.
Ось чому, додаючи @SpringBootApplication, ви одразу отримуєте від Spring Boot усе потрібне для запуску застосунку.
Файл конфігурації: application.properties або application.yml
Різниця між application.properties і application.yml
application.properties: традиційний формат ключ-значення.application.yml: сучасніший спосіб, що підтримує вкладені структури.
Приклад application.properties:
server.port=8080
spring.application.name=DemoApplication
Приклад application.yml:
server:
port: 8080
spring:
application:
name: DemoApplication
YAML вважається більш читабельним, особливо для складних конфігурацій.
Тепер у вас є уявлення про внутрішню будову Spring Boot проєкту. Як кажуть, «не судіть проєкт по вигляду папок, поки не заглянули в його src/main/java». А ми рухаємось далі, щоб зануритися ще глибше у світ Spring Boot!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ