14、组织代码

Spring Boot 不需要任何特定的代码布局,但是有一些最佳实践是很有用的。

14.1、使用 default 包

当一个类没有 package 声明时,它就被认为是在 default 包中。通常不鼓励使用 default 包,应该避免使用。对于使用 @ComponentScan@EntityScan 或者 @SpringBootApplication 注解的 Spring Boot 应用,这样可能会导致特殊问题发生,因为每一个 jar 中的每一个类将会被读取到。

提示

我们建议您使用 Java 推荐的包命名约定,并使用域名的反向形式命名(例如 com.example.project)。

14.2、定位主应用类

我们通常建议您将主应用类放在其它类之上的根包中, @EnableAutoConfiguration 注解通常放在主类上,它隐式定义了某些项目的 包搜索的基准起点。例如,如果您在编写一个 JPA 应用程序,则被 @EnableAutoConfiguration 注解的类所属的包将被用于搜索标记有 @Entity 注解的类。

使用根包还可以允许使用没有指定 basePackage 属性的 @ComponentScan 注解。如果您的主类在根包中,也可以使用 @SpringBootApplication 注解。

以下是一个经典的包结构:

  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 方法,附带了 @Configuration 注解。

  1. package com.example.myapplication;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
  4. import org.springframework.context.annotation.ComponentScan;
  5. import org.springframework.context.annotation.Configuration;
  6. @Configuration
  7. @EnableAutoConfiguration
  8. @ComponentScan
  9. public class Application {
  10. public static void main(String[] args) {
  11. SpringApplication.run(Application.class, args);
  12. }
  13. }