18. Using the @SpringBootApplication Annotation

许多Spring 开发人员喜欢他们的应用程序使用自动配置、组件扫描并且可以定义额外的配置应用程序类.可以使用单个@SpringBootApplication注解来启用这三个特性:

  • @EnableAutoconfiguration: 开启Spring Boot自动配置.
  • @ComponentScan: 在程序所在的包及子包开启@Component组件扫描.
  • @Configuration: 开启在上下文注册额外的实例或者导入额外的配置类.

@SpringBootApplication注解相当于使用带默认参数的@Configuration,@EnableAutoConfiguration@ComponentScan, 如下图所示:

  1. package com.example.myapplication;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. @SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
  5. public class Application {
  6. public static void main(String[] args) {
  7. SpringApplication.run(Application.class, args);
  8. }
  9. }

Note

@SpringBootApplication注解也提供别名去配置@EnableAutoConfiguration@ComponentScan注解的属性.

Note

这些特性都不是强制性的,您可以选择使用它支持的任何特性来替换这个单一注解.例如,您可能不希望在应用程序中使用组件扫描,如下配置: 在本例中,应用程序就像其他Spring Boot应用程序一样,不自动扫描带@Component注解类,而用户定义的bean实例是通过@Import显式导入的. ```java package com.example.myapplication;

import org.springframework.boot.SpringApplication; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import;

@Configuration @EnableAutoConfiguration @Import({ MyConfig.class, MyAnotherConfig.class }) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args);

  1. }

} ```