Spring Boot不需要任何特定的代码布局即可工作。但是,有一些最佳实践可以帮助您。

2.1 使用“默认”包

当一个类不包含package声明时,它被认为是在“默认包”中。通常不建议使用“默认package”,并且应避免这样使用。在使用@ComponentScan@ConfigurationPropertiesScan@EntityScan,或@SpringBootApplication注解时,这会引起存在于Spring Boot应用程序的特殊问题,因为需要从每一个jar文件的每一个类被读取这些注解。

灯泡.svg 我们建议您遵循Java建议的包命名约定,并使用反向域名(例如com.example.project)。

2.2 定位“主”应用程序类

我们通常建议您将主应用程序类放在其他类上一级目录的根包中。@SpringBootApplication注解往往放在你的主类上,它隐含地为某些项目定义了一个基础“搜索包”。例如,如果您正在编写JPA应用程序,@SpringBootApplication注解类所在包被用来搜索@Entity项目。将主应用程序类放在根包中还允许组件扫描的范围仅应用于您的项目。

灯泡.svg 如果您不想使用@SpringBootApplication,它导入的@EnableAutoConfiguration@ComponentScan注解定义了它的行为,因此您也可以使用它们代替。

以下清单显示了典型的布局:

  1. com
  2. +- example
  3. +- myapplication
  4. +- Application.java
  5. |
  6. +- customer
  7. | +- Customer.java
  8. | +- CustomerController.java
  9. | +- CustomerService.java
  10. | +- CustomerRepository.java
  11. |
  12. +- order
  13. +- Order.java
  14. +- OrderController.java
  15. +- OrderService.java
  16. +- OrderRepository.java

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

  1. package com.example.myapplication;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. @SpringBootApplication
  5. public class Application {
  6. public static void main(String[] args) {
  7. SpringApplication.run(Application.class, args);
  8. }
  9. }