SpringBootApplication

使用 spring boot 进行良好的自动包扫描来构建代码的最基本方法是使用 @SpringBootApplication 注释。此注释本身提供了 3 个有助于自动扫描的其他注释:@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(有关 Parameters 部分中每个注释的更多信息)。

通常将 @SpringBootApplication 放在主包中,所有其他组件将放在此文件下的包中:

com
 +- example
     +- myproject
         +- Application.java (annotated with @SpringBootApplication)
         |
         +- domain
         |   +- Customer.java
         |   +- CustomerRepository.java
         |
         +- service
         |   +- CustomerService.java
         |
         +- web
             +- CustomerController.java

除非另有说明,否则 spring boot 会在扫描的包裹下自动检测 @Configuration@Component@Repository@Service@Controller@RestController 注释(@Configuration@RestController 正在被选中,因为它们相应地由 @Component@Controller 注释)。

基本代码示例:

@SpringBootApplication
public class Application {

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

明确设置包/类

从版本 **1.3 开始,**你还可以通过在 @SpringBootApplication 中设置 scanBasePackagesscanBasePackageClasses 而不是指定 @ComponentScan 来告诉 spring boot 扫描特定的包。

  1. @SpringBootApplication(scanBasePackages = "com.example.myproject") - 将 com.example.myproject 设置为扫描的基础包。
  2. @SpringBootApplication(scanBasePackageClasses = CustomerController.class) - scanBasePackages 的类型安全替代品,将 CustomerController.javacom.example.myproject.web 的包装作为扫描的基础包。

不包括自动配置

另一个重要特性是能够使用 excludeexcludeName 排除特定的自动配置类(从版本 1.3 开始存在 excludeName )。

  1. @SpringBootApplication(exclude = DemoConfiguration.class) - 将从自动包扫描中排除 DemoConfiguration
  2. @SpringBootApplication(excludeName = "DemoConfiguration") - 将使用类完全分类的名称来做同样的事情。