相关文章:
Spring源码系列之容器启动流程 建议先阅读这篇文章
系列文章:
【spring源码】01.Spring源码整体脉络介绍及源码编译–spring笔记
【spring源码】02.Ioc容器加载过程-Bean的生命周期源码深度剖析–spring笔记
【spring源码】Spring IoC源码学习:invokeBeanFactoryPostProcessors 详解
【spring源码 4.3.7】Spring IoC源码学习:registerBeanPostProcessors() 详解
【spring源码 4.3.7】Spring IoC源码学习:finishBeanFactoryInitialization() 详解
【spring源码 4.3.7】Spring IoC源码学习:BeanFactory.getBean() 详解
【spring源码 4.3.7】Spring IoC源码学习:AbstractAutowireCapableBeanFactory.populateBean()
【spring源码 4.3.7】Spring 如何解决循环依赖的问题、三级缓存
【spring源码 4.3.7】Spring IoC源码学习:AbstractAutowireCapableBeanFactory.initializeBean() 初始化生命周期
【spring源码 4.3.7】MergedBeanDefinitionPostProcessor和@Autowired,@Value的关系
概述
AutowiredAnnotationBeanPostProcessor
是一个内置的处理器类,负责解析@Autowired和@Value。该类继承了MergedBeanDefinitionPostProcessor
接口。
这样,就可以通过寻找MergedBeanDefinitionPostProcessor接口的全部子类(用户可以自定义处理器类,只要实现这个接口即可),实现注解标签的解析。这里的解析只是给bean的定义增加属性,例如依赖一个其他bean B,而B的真正实例化是在populateBean()中进行的。
详情
热爱spring源码的同学应该知道MergedBeanDefinitionPostProcessor这个接口,这个接口对@Autowired和@Value的支持起到了至关重要的作用。当某个bean在实例化的时候就会调到所有的实现了MergedBeanDefinitionPostProcessor接口的实例。其中就有一个非常关键的类:AutowiredAnnotationBeanPostProcessor
1、首先了解一下MergedBeanDefinitionPostProcessor接口实例调用的地方
这个地方就是 MergedBeanDefinitionPostProcessor接口调用的入口,里面会对所有实现了MergedBeanDefinitionPostProcessor接口的bean(一般是spring内置的后置处理器,用户很少需要自己实现)进行调用,代码如下:
其中解析扫描类里面的@Autowired和@Value注解的就是AutowiredAnnotationBeanPostProcessor
: