美文网首页
spring 生命周期中的属性注入是如何完成的

spring 生命周期中的属性注入是如何完成的

作者: 黑铁大魔王 | 来源:发表于2020-07-09 18:47 被阅读0次

属性注入是如何完成的

在Test4里为test1属性注入值


图0

属性注入是在populate方法里完成的。好,结束了


图1

嘿嘿,继续来看。。。

在第六次调用后置处理器时,AutowiredAnnotationBeanPostProcessor这个后置处理器的postProcessProperties方法功不可没。

图2

进入public PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName) { ... }方法,先要拿到被注入的metadata

图3

貌似能从cache里直接拿到metadata,然后就可以直接return了。那么问题来了,injectionMetadataCache里的内容是何时放进去的呢?后面会解答。

图4

接下来,调用metadate的inject方法来注入


图5

跟进去,走到element.inject( ... )里,这里的element可以通过图四看到,是AutowiredFieldElement。

图6

从674行进入,注册依赖的bean们


图7

把要注入的属性test1放到dependentBeanMap里,正在填充属性的bean test4放到dependenciesForBeanMap里。

图8

这里经过一些判断,beanFactory里的dependentBeanMapdependenciesForBeanMap的内容,在图8的步骤里已经设置过了

图9
图10
图11

通过反射来设置被注入的属性值


图12

走完该方法后,看下target的内容,test1已经被赋值了


image-20200709164705273.png

后置处理器AutowiredAnnotationBeanPostProcessorpostProcessProperties方法执行完之后,BeanWrapper里需要被填充的属性,已经被赋值了。

图14

好了,现在属性注入完成了。

injectionMetadataCache里的内容是何时放进去的

createBean的过程中,第三次调用后置处理器时,会使用AutowireAnnotationBeanPostProcessor后置处理器将有@Autowired注解的类放到cache里

图15 图16 图17 图18

到此为止,就已经把test4放入缓存了


图19

后面的check方法没有细看,把debug截图都贴出来吧。


图20 图21

相关文章

网友评论

      本文标题:spring 生命周期中的属性注入是如何完成的

      本文链接:https://www.haomeiwen.com/subject/aawscktx.html