springboot项目结构
基于 Maven/Gradle 构建规范,各包(目录)的职责和作用如下,按分层架构设计来分工:
1. 最外层基础目录
- src/main/java
核心代码存放根目录,所有 Java 源码(.java
文件)都在这里,编译、运行的核心逻辑围绕它展开。
2. 业务包结构(com.example.calccraft
下的子包)
-
config
- 作用:存放配置类 ,比如 Spring Boot 的
@Configuration
类,用来配置数据库连接、Redis、拦截器、跨域、Swagger 等全局设置。 - 示例:
RedisConfig.java
配置 Redis 客户端,WebMvcConfig.java
注册拦截器、配置视图解析器。
- 作用:存放配置类 ,比如 Spring Boot 的
-
controller
- 作用:控制层 ,负责接收前端请求(HTTP)、参数校验、调用 Service 处理业务,最后返回响应(JSON/页面) 。是前后端交互的“入口”。
- 示例:
UserController.java
里写@GetMapping("/user")
接口,处理用户查询逻辑。
-
dto(Data Transfer Object)
- 作用:数据传输对象 ,用于前后端、服务间传递数据的“容器” 。比如前端传复杂参数、接口返回给前端的定制化数据结构,避免直接用 Entity 暴露数据库细节。
- 示例:
UserDTO.java
可能包含username
、nickname
,但不含数据库字段password
。
-
entity(也叫 model、domain)
- 作用:实体类 ,映射数据库表结构(或其他数据源结构) ,每个字段对应表的一列,通常搭配 ORM 框架(MyBatis、JPA)使用。
- 示例:
UserEntity.java
里id
、username
、password
对应数据库user
表的字段。
-
interceptor
- 作用:存放拦截器 ,用于拦截 HTTP 请求,实现统一的逻辑:比如登录校验、接口耗时统计、参数统一处理等 ,配合
config
里的配置生效。 - 示例:
LoginInterceptor.java
拦截请求,检查token
是否合法。
- 作用:存放拦截器 ,用于拦截 HTTP 请求,实现统一的逻辑:比如登录校验、接口耗时统计、参数统一处理等 ,配合
-
mapper(也可能叫 dao)
- 作用:数据访问层 ,MyBatis 场景下是 Mapper 接口 + XML(或注解) ,定义数据库操作(增删改查 SQL) ;JPA 场景下可能是继承
JpaRepository
的接口。负责直接操作数据库。 - 示例:
UserMapper.java
写@Select("select * from user where id=#{id}")
,或通过 XML 配 SQL。
- 作用:数据访问层 ,MyBatis 场景下是 Mapper 接口 + XML(或注解) ,定义数据库操作(增删改查 SQL) ;JPA 场景下可能是继承
-
service
- 作用:业务逻辑层 ,封装核心业务逻辑,组合 Mapper 做数据操作,处理复杂业务流程(比如“下单”要校验库存、扣减、生成订单等步骤) ,供 Controller 调用。
- 示例:
UserService.java
里getUserById()
调用UserMapper
查询,可能还会做缓存、权限校验。
-
util
- 作用:工具类包 ,存放通用工具方法:比如加密解密(
CryptoUtil
)、日期处理(DateUtil
)、HTTP 工具、枚举常量等 ,让业务代码更简洁,避免重复造轮子。
- 作用:工具类包 ,存放通用工具方法:比如加密解密(
3. 启动类(CalcCraftApplication
)
- 作用:Spring Boot 项目的启动入口 ,带
@SpringBootApplication
注解,运行它会启动整个 Spring 容器,扫描包、加载配置、初始化 Bean 等。
这种分层结构的核心是 “高内聚、低耦合” :每层专注自己的职责,修改业务逻辑只动 service
,改接口入参只动 dto
,方便维护和协作开发 。如果是 Spring Cloud 等分布式场景,结构会更复杂(加 client
、feign
等包),但基础分层逻辑一致。