【spring源码 4.3.7】MergedBeanDefinitionPostProcessor和@Autowired,@Value的关系

相关文章:
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
在这里插入图片描述

参考

MergedBeanDefinitionPostProcessor和@Autowired,@Value的关系


版权声明:本文为m0_45406092原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。