大概可以把 @SpringBootApplication看作是 @Configuration、@EnableAutoConfiguration、@ComponentScan 注解的集合。根据 SpringBoot 官网,这三个注解的作用分别是:
@EnableAutoConfiguration:启用 SpringBoot 的自动配置机制
@Configuration:允许在上下文中注册额外的 bean 或导入其他配置类
@ComponentScan: 扫描被@Component (@Service,@Controller)注解的 bean,注解默认会扫描启动类所在的包下所有的类 ,可以自定义不扫描某些 bean。如下图所示,容器中将排除TypeExcludeFilter和AutoConfigurationExcludeFilter。
@EnableAutoConfiguration:实现自动装配的核心注解
EnableAutoConfiguration 只是一个简单地注解,自动装配核心功能的实现实际是通过 AutoConfigurationImportSelector类。
AutoConfigurationImportSelector:加载自动装配类,从所有starter下面的META-INF/spring.factories中读取AutoConfiguration类,最后通过@ConditionalOnXXX系列注解使得特定的AutoConfiguration类生效,然后加载符合特定条件(也是通过@ConditionalOnXXX注解限定)的bean,从而完成自动装配。
AutoConfiguration类其实就是一个普通的配置类,通过@Configuration注解标明。