SpirngCloud核心SpringBoot自动装配原理

自动装配原理分析.png

自动装配是SpringBoot中通过@EnableAutoCinfiguration注解来开启的,这个注解的声明在启动类注解@SpringBootApplication内;


image.png

注:

@Enable注解:在Spring3.1就已经支持该类型注解,主要作用是吧相关组件的Bean装配到IOC容器中;@Enable注解是对JavaConfig的进一步完善,为使用S任凭Framework的开发者减少了配置代码量,降低了使用难度;
如果基于JavaConfig的形式来完成Bean的加载,则必须使用@Configuration注解及Bean注解;而@Enable本质上就是对着两个注解的封装;

@EnableAutoConfiguration

进入该注解可以看到除了@Import为还有一个@AutoConfigurationPackage(作用见图),而可以看见Import中引入了一个AutoConfigurationImportSelector,该AutoConfigurationImportSelector实现了ImportSelector,他只有一个selectImports抽象方法,并返回一个String数组,在这个shuzh中可以指定需要装配到IOC容器的类;


image.png

在selectImports方法中,这个方法主要有两个功能
1.AutoConfigurationMetadataLoader.loadMetadata从META-INF/Spring-autoconfigure-metadata.properties中加载自动装配的条件元数据
2.收集所有符合条件的配置类AutoConfigurationEntry.getConfigurations(),完成自动装配
需要注意的是在AutoConfigurationImportSelector中不执行selectImports()方法,而是通过ConfigurationClassPostProcessor中的processConfigBeanDefinitions方法来扫描和注册所有配置类的Bean,最终还是会调用getAutoConfigurationEntry方法获得所有需要自动装配的类;
在getAutoConfigurationEntry方法中通过去重等操作,得到最终需要实现自动装配的类;而得到的核心方法是getCandidateConfigurations


image.png

在该方法中
image.png

使用了SpringFactoriesLoader,它会扫描classPath下的META-INF/Spring.factories文件;根据配置文件中的key得到value值

你可能感兴趣的:(SpirngCloud核心SpringBoot自动装配原理)