14.2 Locating the main application class
通常建议将应用的main类放到其他类所在包的顶层(root package),并将@EnableAutoConfiguration
注解到你的main类上,这样就隐式地定义了一个基础的包搜索路径(search package),以搜索某些特定的注解实体(比如@Service
,@Component
等) 。例如,如果你正在编写一个JPA应用,Spring将搜索@EnableAutoConfiguration
注解的类所在包下的@Entity
实体。
采用root package方式,你就可以使用@ComponentScan
注解而不需要指定basePackage
属性,也可以使用@SpringBootApplication
注解,只要将main类放到root package中。
下面是一个典型的结构:
com
+- example
+- myproject
+- Application.java
|
+- domain
| +- Customer.java
| +- CustomerRepository.java
|
+- service
| +- CustomerService.java
|
+- web
+- CustomerController.java
@EnableAutoConfiguration
这个注解告诉Spring Boot根据添加的jar依赖猜测你想如何配置Spring。比如你在项目中引入了spring-boot-starter-web
,添加了Tomcat和Spring MVC相关的jar包,所以auto-configuration将假定你正在开发一个web应用,并对Spring进行相应地设置。虽然通过Strater项目引入的jar包可以与auto-configuration很好地协作,但这两个概念没有直接的联系。你可以自由地挑选starters以外的jar依赖,Spring Boot仍会尽最大努力去自动配置你的应用,负责auto-configuration的项目为spring-boot-autoconfigure
Application.java
可以写成如下形式:
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);
}
}
@Configuration
、@EnableAutoConfiguration
、@ComponentScan
三者等同于@SpringBootApplication
因此可以更简单地写成:
package com.example.myproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}