推荐工程结构
约 609 字大约 2 分钟
布欧-Lewyon
2026-05-15
首页 › Spring Boot › 快速入门 › 推荐工程结构
Spring Boot 对工程目录没有强约束,但社区积累了成熟的分层约定。本节给出推荐结构及其理由。
包结构:分层与功能
com.example.demo
├── DemoApplication.java # 入口类
├── config/ # @Configuration 配置类
│ └── WebConfig.java
├── controller/ # @RestController / @Controller
│ └── UserController.java
├── service/ # @Service 业务逻辑
│ └── UserService.java
├── repository/ # @Repository 数据访问(对应 JPA Repository 或 DAO)
│ └── UserRepository.java
├── model/ # 实体 / DTO
│ ├── entity/
│ │ └── User.java
│ └── dto/
│ ├── UserCreateRequest.java
│ └── UserResponse.java
└── common/ # 工具类、统一响应、全局异常处理
├── Result.java
└── GlobalExceptionHandler.java按功能还是按层
中小项目推荐按层分包(如上图)。模块化程度要求较高时,可以按功能分包:
com.example.demo
├── user/
│ ├── UserController.java
│ ├── UserService.java
│ └── UserRepository.java
├── order/
│ ├── OrderController.java
│ ├── OrderService.java
│ └── OrderRepository.java
...两种方式各有优劣。按层分包简单直观,适合团队统一风格;按功能分包有利于大型项目模块独立。Spring Boot 官方示例两种都有,选一种并在项目中保持一致即可。
资源目录
src/main/resources/ 是 Spring Boot 加载配置与静态资源的默认位置:
src/main/resources/
├── application.yml # 主配置文件
├── application-dev.yml # 开发环境配置
├── application-prod.yml # 生产环境配置
├── static/ # 静态资源(CSS/JS/图片)
├── templates/ # 模板文件(Thymeleaf / FreeMarker)
├── messages/ # i18n 资源
│ └── messages.properties
├── db/migration/ # Flyway/Liquibase 迁移脚本
│ └── V1__init.sql
└── banner.txt # 启动时打印的横幅(可选)测试目录
测试目录结构与 main 镜像:
src/test/java/com/example/demo/
├── DemoApplicationTests.java # 集成测试
├── controller/
├── service/
└── repository/src/test/resources/ 也可以放独立的测试配置,例如 application-test.yml。
生产意识:不要在
src/test/下放置与测试无关的业务代码或资源。部分团队误将application-local.yml放进测试资源目录,导致 CI 构建时意外加载——测试专用的配置使用@ActiveProfiles("test")显式激活即可。
小结
- 推荐按层分包(controller / service / repository / model / config),中小项目足够清晰。
- 配置与静态资源统一放在
src/main/resources/。 - 测试目录与 main 镜像,便于
@SpringBootTest扫描。 - 易错:不要将业务逻辑写在 Controller 中。Controller 仅处理请求映射与参数校验,业务逻辑抽到 Service 层,一是便于测试,二是便于多个入口复用。
- 思考任务:回顾你当前项目中包的划分方式,想一想是否把数据访问或校验逻辑放到了 Controller 里,可以如何拆分。
下一节:配置详解
