代码结构化
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,如下所示:
- Java
- Kotlin
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);
}
}
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
@SpringBootApplication
class MyApplication
fun main(args: Array<String>) {
runApplication<MyApplication>(*args)
}