Spring Boot并不要求任何特殊的代码布局,然而,存在一些有用的最佳实践。
如果一个类没有声明包,则认为这个类位于“默认包”中。通常不鼓励使用“默认包”,应当避免使用它。对于使用了@ComponentScan
、@EntityScan
或@SpringBootApplication
注解的Spring Boot程序,“默认包”可能会导致特殊问题,因为每个jar中的每个类都将被读取。
我们建议您遵循Java推荐的命名约定并使用反向域名(例如
com.example.project
)。
我们通常建议您将主程序类放在位于其他类之上的根包中。@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);
}
}