今天看到有人在问SpringBoot自动装配原理。-阿里云开发者社区

开发者社区> 开发与运维> 正文

今天看到有人在问SpringBoot自动装配原理。

简介: 仅个人心得,不足之处请指出。

很多人讲这个会从@EnableAutoConfiguration注解为入口其实对于初学者来说还是不太容易理解,为什么有这个注解就会自动装配了
其实SpringBoot的入口在invokeBeanFactoryPostProcessors(beanFactory);这个方法中,熟悉Spring源码的应该知道,这个类会加载执行我们的所有BeanFactoryPostProcessor,而这个方法中SpringBoot做了扩展,就是获取BeanFactory中的所有BeanDefinitionRegistryPostProcessor.class,结果只有一个就是org.springframework.context.annotation.internalConfigurationAnnotationProcessor,这个类并不是我们的目标类,也很明显这个类的首个字母为小写,但是这个类指向的是我们ConfigurationClassPostProcessor,具体为什么感兴趣的可以查一下,我就不展开了,这个类是SpringBoot的核心类,他会扫描SpringBoot启动器类加载器所能触及的所有加有@Bean,@Component等,对于自动装配我们只关注他会递归扫描我们启动器类上的注解,将所有@Import注解标注的目标类,加入到this.deferredImportSelectors属性中,然后根据注解的目标类也就是我们的AutoConfigurationImportSelector.class,然后遍历所有的引入的类的getImports()方法,我们只关注AutoConfigurationImportSelector的,方法中有一个重要的方法getAutoConfigurationEntry(annotationMetadata);进入方法中我们只需要关注List configurations = getCandidateConfigurations(annotationMetadata, attributes);这一行,进去后发现了我们最熟悉的SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),getBeanClassLoader());而第一个参数(getSpringFactoriesLoaderFactoryClass()返回的就是EnableAutoConfiguration.class;
OK收,此时我们获取自动装配类的逻辑已经结束了,对于后续有兴趣的可以自己翻几遍源码。谢谢大家。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章