快捷搜索:  汽车  科技

spring多模块开发注入问题(SpringDI之依赖注入)

spring多模块开发注入问题(SpringDI之依赖注入)大致业务逻辑如下:看到这里相信很多人都明白了 Spring 的 setter()注入原理。好兄弟可以点赞并关注我的公众号“javaAnswer”,全部都是干货。

spring多模块开发注入问题(SpringDI之依赖注入)(1)

前言

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

spring多模块开发注入问题(SpringDI之依赖注入)(2)

注意:本文是以5.2.3版本为讲解。

让我们再次回到故事的源头”AbstractAutowireCapableBeanFactory#applyPropertyValue()“方法。

步骤一:对属性值进行依赖注入

BeanWrapperImpl 主要是对容器中完成初始化的 Bean 实例对象进行属性的依赖注入,即把 Bean 对象设置到它所依赖的另一个 Bean 的属性中去。然而,BeanWrapperImpl 中的注入方法实际上由 AbstractNestablePropertyAccessor 来实现的:

spring多模块开发注入问题(SpringDI之依赖注入)(3)

spring多模块开发注入问题(SpringDI之依赖注入)(4)

spring多模块开发注入问题(SpringDI之依赖注入)(5)

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

spring多模块开发注入问题(SpringDI之依赖注入)(6)


步骤三:实现属性依赖注入功能

大致业务逻辑如下:

  • getPropertyHoldingValue:调用属性的getter(readerMethod)方法,获取属性的值
  • 注入array类型的属性值
  • 注入list类型的属性值
  • 注入Map类型的属性值

spring多模块开发注入问题(SpringDI之依赖注入)(7)

spring多模块开发注入问题(SpringDI之依赖注入)(8)

spring多模块开发注入问题(SpringDI之依赖注入)(9)

  • 对于集合类型的属性,将其属性值解析为集合后直接赋值给属性。
  • 对于非集合类型的属性,使用了 JDK 的反射机制,通过属性的 getter()方法获取指定属性注入以前的值,同时调用属性的 setter()方法为属性设置注入后的值。

看到这里相信很多人都明白了 Spring 的 setter()注入原理。

时序图

spring多模块开发注入问题(SpringDI之依赖注入)(10)

写在最后

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

猜您喜欢: