位置
META-INF/spring.factories
作用
SPI,方便扩展;遵循可拔插的原则;
使用场景
将依赖的jar中的bean注入到当前容器中
源码分析
关键类
@SpringBootApplication
@EnableAutoConfiguration
@Import(AutoConfigurationImportSelector.class)
ConfigurationClassPostProcessor
ConfigurationClassParser
SpringFactoriesLoader
大致流程:
入口:
1.容器启动入口
SpringApplication.run
2.刷新引用上下文
AbstractApplicationContext#refresh()
3.调用bean工厂的后置处理器
AbstractApplicationContext#invokeBeanFactoryPostProcessors()
4.委托调用bean工厂的后置处理器
PostProcessorRegistrationDelegate#invokeBeanFactoryPostProcessors()
处理:
1.注册注解后缀处理器,其中包含ConfigurationClassPostProcessor
AnnotationConfigUtils#registerAnnotationConfigProcessors()
2.委托执行ConfigurationClassPostProcessor#postProcessBeanDefinitionRegistry
3.通过ConfigurationClassParser解析每个@Configuration类
4.延迟处理DeferredImportSelectorHandler#process()
5.延迟处理DeferredImportSelectorGroupingHandler
6.处理自动配置AutoConfigurationImportSelector#AutoConfigurationEntry
7.关键方法,回去候选的配置类getCandidateConfigurations
8.SpringFactoriesLoader.loadFactoryNames获取spring.factories文件中EnableAutoConfiguration类(classLoader.getResources),并放到本地缓存
9.最后分别处理configuration注入到当前spring容器中