Когда вы создаёте проект 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!