在一个典型的 Spring 项目中,尤其是基于 Spring Boot 或 Spring MVC 的项目,会有一个清晰的目录结构来组织不同的功能模块。下面是一个常见的 Spring Boot 项目的文件结构,包含了大多数常用的目录和文件:
常见的 Spring 项目目录结构
my-spring-project
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── example
│ │ │ └── myspringproject
│ │ │ ├── config # 配置类
│ │ │ ├── controller # 控制器层 (Spring MVC)
│ │ │ ├── dao # 数据访问层 (DAO),(在 MyBatis 项目中,同Mapper 层 )
│ │ │ ├── dto # 数据传输对象 (DTO)
│ │ │ ├── exception # 异常处理
│ │ │ ├── model) # 实体类 (PO, VO)(Domain 、Entity)
│ │ │ ├── repository # Spring Data JPA / MyBatis Repository
│ │ │ ├── service # 服务层 (业务逻辑)
│ │ │ ├── util # 工具类 (Utility classes)
│ │ │ └── MySpringProjectApplication.java # 启动类
│ │ ├── resources
│ │ │ ├── application.properties # 配置文件(application.yml)
│ │ │ ├── static # 静态资源(例如:JS, CSS, 图片等)
│ │ │ ├── templates # 模板文件(例如:Thymeleaf, FreeMarker)
│ │ │ ├── db # 数据库相关脚本
│ │ │ └── application.yml # 配置文件(备用形式)
│ ├── test
│ │ ├── java
│ │ │ └── com
│ │ │ └── example
│ │ │ └── myspringproject
│ │ │ └── MySpringProjectApplicationTests.java # 测试类
│ └── pom.xml (或 build.gradle) # 项目的构建工具配置文件 (Maven 或 Gradle)
解释各个目录和文件的功能
1. src/main/java/com/example/myspringproject
这是项目的 Java 代码部分。
-
config
:配置类,通常包括@Configuration
注解的类,设置 Spring Boot 或 Spring MVC 的各种配置,如数据源、Security 配置等。- 示例:
DataSourceConfig.java
、SecurityConfig.java
- 示例:
-
controller
:控制器层,包含处理 HTTP 请求的控制器类,使用@RestController
或@Controller
注解,负责将请求映射到相应的服务。- 示例:
UserController.java
、OrderController.java
- 示例:
-
dao
:数据访问对象层,通常与数据库交互的类,通常会使用 MyBatis 或 Spring Data JPA 来执行数据库操作。- 示例:
UserDao.java
、OrderDao.java
- 示例:
-
dto
:数据传输对象,主要用于服务层与前端之间的数据传输。通常是简化的 PO(持久化对象)或者聚合多个模型的对象。- 示例:
UserDTO.java
、OrderDTO.java
- 示例:
-
exception
:异常处理类,用于捕获并处理应用程序中的异常。可以使用@ControllerAdvice
或@ExceptionHandler
来集中处理。- 示例:
GlobalExceptionHandler.java
- 示例:
-
model
:模型层,通常是实体类,代表数据库中的表。一般来说,这些类会被映射到数据库表(通过 JPA 或 MyBatis)。- 示例:
User.java
、Order.java
- 示例:
-
repository
:数据仓库层,Spring Data JPA 或 MyBatis 的接口通常放在这里。它与数据库表的交互通过 ORM 框架或 MyBatis Mapper 来实现。- 示例:
UserRepository.java
、OrderRepository.java
- 示例:
-
service
:服务层,包含业务逻辑,通常调用repository
层来执行 CRUD 操作,同时可以包含一些复杂的业务逻辑。- 示例:
UserService.java
、OrderService.java
- 示例:
-
util
:工具类,包含一些通用的辅助方法或工具类(如日期处理、字符串处理等)。- 示例:
DateUtils.java
、StringUtils.java
- 示例:
-
MySpringProjectApplication.java
:Spring Boot 启动类,包含@SpringBootApplication
注解的类,是应用程序的入口点,通常包含main
方法来启动 Spring Boot 应用。
2. src/main/resources
这是资源文件部分。
-
application.properties
或application.yml
:配置文件,Spring Boot 项目的核心配置文件,定义数据库连接、端口号、日志、缓存等各种配置项。-
示例:
server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=root
-
-
static
:静态资源目录,用于存放前端的静态文件,如 CSS、JavaScript、图片等。这些文件通常不会经过服务器端处理,直接通过 HTTP 访问。- 示例:
styles.css
、scripts.js
- 示例:
-
templates
:模板文件目录,通常用于存放视图模板文件,如 Thymeleaf 或 FreeMarker 模板。- 示例:
index.html
、login.html
- 示例:
-
db
:数据库相关的脚本文件,通常用于存放初始化数据库的 SQL 脚本。- 示例:
schema.sql
、data.sql
- 示例:
3. src/test/java
这是项目的测试代码部分,使用 JUnit 或 TestNG 等框架进行单元测试和集成测试。
MySpringProjectApplicationTests.java
:Spring Boot 应用程序的测试类,通常包含对启动类的基本测试,确保应用程序能正确启动。- 你可以在这个目录下添加其他测试类,如
UserServiceTest.java
,用于测试服务层的业务逻辑。
4. 构建工具文件(pom.xml
或 build.gradle
)
-
pom.xml
:Maven 构建工具的配置文件,定义了项目的依赖项、插件、构建目标等。-
示例:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> </dependencies>
-
-
build.gradle
:Gradle 构建工具的配置文件,类似于 Maven 的pom.xml
,用于定义项目的依赖和构建任务。
小结
这是一个 Spring Boot 项目的典型文件结构,随着项目规模的增加,可能会根据需要进行扩展,例如引入新的模块(如消息队列模块、缓存模块等)。这个结构遵循了 分层架构 的设计原则,使得各层功能清晰,易于维护和扩展。