Spring DI之依赖注入

前言
在上篇文章“Spring DI三部曲之实例化”中,我们讲解了spring bean是如何实例化的,接下来我们会讲解是如何依赖注入的。

注意:本文是以5.2.3版本为讲解。
让我们再次回到故事的源头”
AbstractAutowireCapableBeanFactory#applyPropertyValue()“方法。
步骤一:对属性值进行依赖注入
BeanWrapperImpl 主要是对容器中完成初始化的 Bean 实例对象进行属性的依赖注入,即把 Bean 对象设置到它所依赖的另一个 Bean 的属性中去。然而,BeanWrapperImpl 中的注入方法实际上由
AbstractNestablePropertyAccessor 来实现的:



步骤二:将指定值设置为当前属性值

步骤三:实现属性依赖注入功能
大致业务逻辑如下:
getPropertyHoldingValue:调用属性的getter(readerMethod)方法,获取属性的值
注入array类型的属性值
注入list类型的属性值
注入Map类型的属性值



对于集合类型的属性,将其属性值解析为集合后直接赋值给属性。
对于非集合类型的属性,使用了 JDK 的反射机制,通过属性的 getter()方法获取指定属性注入以前的值,同时调用属性的 setter()方法为属性设置注入后的值。
看到这里相信很多人都明白了 Spring 的 setter()注入原理。
时序图

写在最后
好兄弟可以点赞并关注我的公众号“javaAnswer”,全部都是干货。
