跳到主要内容
版本:3.5.10

代码结构化

QWen Max 中英对照 Structuring Your Code

Spring Boot 并不要求特定的代码布局即可正常工作。然而,有一些最佳实践会有所帮助。

提示

如果你希望基于领域强制实施一种结构,请查看 Spring Modulith

使用 “default” 包

当一个类没有包含 package 声明时,它将被视为位于“默认包”(default package)中。通常不建议使用“默认包”,应尽量避免。对于使用 @ComponentScan@ConfigurationPropertiesScan@EntityScan@SpringBootApplication 注解的 Spring Boot 应用程序来说,这可能会引发特定问题,因为这些注解会读取每个 JAR 文件中的所有类。

提示

我们建议你遵循 Java 推荐的包命名规范,使用反向域名(例如 com.example.project)。

定位主应用程序类

我们通常建议将主应用程序类放在一个根包中,该根包位于其他类的上方。@SpringBootApplication 注解通常放置在主类上,它会隐式地为某些项目定义一个基础的“搜索包”。例如,如果你正在编写一个 JPA 应用程序,那么带有 @SpringBootApplication 注解的类所在的包将被用于搜索 @Entity 项。使用根包还可以确保组件扫描(component scan)仅作用于你的项目。

提示

如果你不想使用 @SpringBootApplication,它所导入的 @EnableAutoConfiguration@ComponentScan 注解定义了该行为,因此你也可以直接使用这些注解。

以下清单展示了一个典型的布局:

com
+- example
+- myapplication
+- MyApplication.java
|
+- customer
| +- Customer.java
| +- CustomerController.java
| +- CustomerService.java
| +- CustomerRepository.java
|
+- order
+- Order.java
+- OrderController.java
+- OrderService.java
+- OrderRepository.java

MyApplication.java 文件将声明 main 方法以及基本的 @SpringBootApplication,如下所示:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {

public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}

}