springboot的src/main/java下完整的文件夹有哪些?
Spring Boot 项目通常采用 MVC 分层架构(或更细的 DDD 分层),以下是核心分层文件夹:
目录
3. repository(仓储层,Spring Data 场景)
一、核心业务分层文件夹
1. controller
(控制层)
- 作用:处理 HTTP 请求(如
GET
、POST
),调用Service
层完成业务逻辑,返回响应结果(如 JSON、视图)。 - 典型类:
UserController.java
(用户接口)、OrderController.java
(订单接口)。 - 关键注解:
@RestController
(标记为 REST 控制器)、@RequestMapping
(定义请求路径)、@GetMapping
/@PostMapping
(定义具体 HTTP 方法)。
2. service
(服务层)
- 作用:封装核心业务逻辑(如用户注册校验、订单状态流转),调用
Repository
或Mapper
层操作数据库,协调多个DAO
或外部服务。 - 典型类:
UserService.java
(用户服务)、OrderService.java
(订单服务)。 - 关键注解:
@Service
(标记为服务类)、@Transactional
(声明事务)。
src/main/java/com/example/demo/service/
├── UserService.java // 接口(定义业务方法)
└── impl/
└── UserServiceImpl.java // 实现类(具体业务逻辑)
service下的impl文件夹作用是通过“接口-实现”分离,实现代码的高内聚、低耦合,让项目结构更清晰、更易维护和扩展。
3. repository
(仓储层,Spring Data 场景)
- 作用:定义与数据库交互的接口(继承 Spring Data 通用接口如
JpaRepository
),通过 Spring Data 自动生成 SQL 实现,解耦业务与数据库操作。 - 典型类:
UserRepository.java
(用户仓储)、OrderRepository.java
(订单仓储)。 - 关键依赖:Spring Data JPA(
spring-boot-starter-data-jpa
)。
4. mapper
(映射层,MyBatis 场景)
- 作用:定义与数据库交互的接口(MyBatis Mapper),通过 XML 或注解绑定 SQL 语句,实现复杂 SQL 操作。
- 典型类:
UserMapper.java
(用户映射器)、OrderMapper.java
(订单映射器)。 - 关键依赖:MyBatis 或 MyBatis-Plus(
mybatis-spring-boot-starter
)。
5. model
(模型层)
- 作用:集中存放数据模型类,包括:
- 实体类(Entity):映射数据库表(如
User.java
、Order.java
)。 - 数据传输对象(DTO):接口请求/响应的数据结构(如
UserRegisterDTO.java
、UserInfoDTO.java
)。 - 视图对象(VO):前端视图展示的数据结构(如
UserVO.java
)。
- 实体类(Entity):映射数据库表(如
- 典型类:
User.java
(实体)、UserRegisterDTO.java
(请求 DTO)、UserInfoVO.java
(响应 VO)。
6. entity(实体层)
- 作用:
entity
文件夹(或包,全称为 Entity,即“实体”)是数据持久化层的核心目录,主要用于存放与数据库表直接映射的 Java 类(即“实体类”)
二、扩展功能文件夹
根据项目需求,可能还需要以下功能性文件夹:
1. config
(配置层)
- 作用:集中存放自定义配置类(如 Bean 配置、拦截器、过滤器、外部化配置读取)。
- 典型类:
WebMvcConfig.java
(Web MVC 配置)、RedisConfig.java
(Redis 配置)、SecurityConfig.java
(安全配置)。 - 关键注解:
@Configuration
(标记为配置类)、@Bean
(定义 Bean)。
2. exception
(异常层)
- 作用:定义自定义异常类(如
UserNotFoundException.java
)、全局异常处理器(捕获并统一处理异常)。 - 典型类:
BusinessException.java
(业务异常)、GlobalExceptionHandler.java
(全局异常处理器)。
3. util
(工具层)
- 作用:存放通用工具类(如日期处理、字符串加密、HTTP 工具),提供静态方法或单例 Bean。
- 典型类:
DateUtils.java
(日期工具)、StringUtils.java
(字符串工具)、JwtUtil.java
(JWT 工具)。
4. constants
(常量层)
- 作用:集中存放项目中的常量(如状态码、枚举值、配置参数),避免魔法值散落在代码中。
- 典型类:
ErrorCode.java
(错误码枚举)、SystemConstants.java
(系统常量)。
5. task
(任务层,可选)
- 作用:存放定时任务(
@Scheduled
)或异步任务(@Async
)的逻辑。 - 典型类:
ScheduledTask.java
(定时任务)、AsyncEmailTask.java
(异步邮件任务)。
6. event
(事件层,可选)
- 作用:基于 Spring 事件驱动模型(
ApplicationEvent
),定义自定义事件及监听器。 - 典型类:
UserRegisteredEvent.java
(用户注册事件)、OrderPaidEventListener.java
(订单支付监听器)。
7. result(结果层,可选)
- 作用:
result
文件夹(或包)并非框架内置的标准目录,而是团队根据业务需求自定义的代码组织方式,主要用于存放接口返回结果的封装类(如统一响应对象、分页结果、错误信息等)。它的核心作用是将接口的返回数据标准化,提升前后端协作效率,并让业务逻辑与结果格式解耦。