首先在引导类上面会有一个注解@ApringBootApplication
进去之后有差不多七个注解,用来定义注解上面四个注解是springboot的原注解,
比如
这个注解表示在运行期有效,编译期无效
进去之后,里面会有三个主要的注解
@SpringBootConfiguration
@EnableAuyoConfiguration
@ComponentScan
首先是@SpringBootConfiguration
它里面有个注解@Configruation,声名引导类也是一个配置类
接下来就是比较关键的注解@EnableAutoConfiguration,他的作用是开启自动配置,进去之手,有个注解@Import(AutoConfigurationInportSelector.class)
@Import里面有个类AutoConfigurationImportSelector,他会自动导入被选择的那些配置
AutoConfigurationImportSelector.class这个类会自动筛选需要配置的
AutoConfigurationImportSelector继承DeferredImportSelector
他会实现DeferredImportSelector中的selectorImport方法
这个方法用来做选择配置的
selectorImport方法里面的getAutoConfigurationEntry
getAutoConfigurationEntry会把有效的留下来
maven中导入的依赖就会有对应的字节码,由@ConditionOnClass(xxx.class)去解析
当初始化springboot依赖的run方法,会加载sping.factories配置文件,里面有一百多个配置
然后通过自己导入的依赖,会通过@ConditionOnClass这个注解,找到其对应的字节码,就会筛选自动配置