14. 构建代码

Spring Boot并不要求任何特殊的代码布局,然而,存在一些有用的最佳实践。

14.1 使用“default”包

如果一个类没有声明包,则认为这个类位于“默认包”中。通常不鼓励使用“默认包”,应当避免使用它。对于使用了@ComponentScan@EntityScan@SpringBootApplication注解的Spring Boot程序,“默认包”可能会导致特殊问题,因为每个jar中的每个类都将被读取。

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

14.2 放置主程序类

我们通常建议您将主程序类放在位于其他类之上的根包中。@EnableAutoConfiguration注解经常置于您的主类上,并且它还隐式定义了某些项的基本“搜索包”。例如,如果您正在编写JPA程序,@EnableAutoConfiguration注解的类所在的包将用于搜索@Entity项。

使用根包还允许使用@ComponentScan注解而不需要指定basePackage属性。如果主类位于根包中,您也可以使用@SpringBootApplication注解。

这是一个典型的布局:

com
 +- example
     +- myproject
         +- Application.java
         |
         +- domain
         |   +- Customer.java
         |   +- CustomerRepository.java
         |
         +- service
         |   +- CustomerService.java
         |
         +- web
             +- CustomerController.java

Application.java文件将使用基础的@Configuration注解声明main方法

package com.example.myproject;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {

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

}

书籍推荐