①@SpringBootApplication实现自动配置
如上,SpringBoot实现自动配置是通过注解@SpringBootApplication实现的。而这个注解又是三个注解的复合注解
①SpringBootConfiguration
@SpringBootConfiguration实现了@Configuration注解,所以实际上这个注解的作用主要是为了标识主程序类是SpringBoot的核心配置类(配置类会作为组件注册进IOC容器中)
②@ComponentScan
作用是开启包扫描
③核心注解@@EnableAutoConfiguration
这个注解就是实现自动配置的核心
@EnableAutoConfigurations是注解@AutoConfigurationPackage和@Import的复合注解
@AutoConfigurationPackage的作用是将当前主程序所在的包及其所有子包下的所有组件都注册进IOC容器中
上述的这个功能因为@AutoConfigurationPackage实际上是实现了@Import注解,不过这个注解注册的不仅仅是一个组件,而是通过注解元数据获取到主程序所在的包名,通过包名将主程序及其子包下的组件进行注册
而真正进行自动配置的是@EnableAutoConfigurations实现的第二个注解@Import,这个注解的作用是将所有场景(记住是所有场景)的127个自动配置类都加载进来,但加载进来的自动配置类不一定都能够在IOC容器中注册
加载进来所有的127个自动配置类后,会利用条件装配@Conditional及其子注解来进行有选择将需要的组件注册进IOC容器
如下Aop的自动配置类:
虽然我们127个场景的所有自动配置启动的时候默认全部加载。xxxxAutoConfiguration
按照条件装配规则(@Conditional),最终会按需配置。
上述内容来源于尚硅谷,如有侵权联系删除