18. 使用@SpringBootApplication注解

    许多Spring Boot开发者喜欢他们的应用使用自动配置,组件扫描和可以定义额外的配置在它们的“application class”上。一个单独的@SpringBootApplication注解,可以用来开启这三个特性,即:

    • @EnableAutoConfiguration:开启Spring Boot的自动配置机制
    • @ComponentScan:在你放置应用的包上开启@Component扫描
    • @Configuration:在上下文中允许注册额外的bean或者导入额外的配置类

    @SpringBootApplication注解等价于使用@Configuration@EnableAutoConfiguration,和@ComponentScan和他们的默认属性,如下所示:

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

    @SpringBootApplication也提供别名来定制@EnableAutoConfiguration@ComponentScan属性。

    这些特性没有一个是强制的,你可能选择替换这个单个的注解,用任何它开启的特性。举个例子,你可能不想使用组件扫描在你的应用中:

    1. package com.example.myapplication;
    2.  
    3. import org.springframework.boot.SpringApplication;
    4. import org.springframework.context.annotation.ComponentScan
    5. import org.springframework.context.annotation.Configuration;
    6. import org.springframework.context.annotation.Import;
    7.  
    8. @Configuration
    9. @EnableAutoConfiguration
    10. @Import({ MyConfig.class, MyAnotherConfig.class })
    11. public class Application {
    12.  
    13. public static void main(String[] args) {
    14. SpringApplication.run(Application.class, args);
    15. }
    16.  
    17. }

    在这个例子中Application就像任何其他Spring Boot应用除了@Component注解的类不被自动发现和用户定义的bean被显示导入(查阅@Import)。