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

了解@EnableAutoConfiguration

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);
    }
}

results matching ""

    No results matching ""