(一)Spring核心-IoC容器的依赖注入

本文详细介绍了Spring框架中依赖注入的过程。从用户首次向IoC容器请求Bean开始,阐述了如何通过DefaultListableBeanFactory的getBean()方法触发依赖注入,并深入探讨了AbstractBeanFactory中的doGetBean()方法及其实现细节。文章还解释了Bean的创建和依赖注入的递归过程,以及如何通过BeanDefinition中的信息来完成这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

依赖注入的过程是用户第一次向IoC容器索要Bean时触发的,也就是由DefaultListableBeanFactory中的getBean()这个方法触发的。具体的实现是在AbstractBeanFactory中的doGetBean()这个方法中。如果在当前的工厂中取不到Bean,就到双亲BeanFactory中取,如果当前双亲工厂取不到,就顺着双亲BeanFactory链一直向上查找,再获取当前Bean的所有依赖Bean,触发getBean的递归调用,直到取得一个没有任何依赖的Bean为止。在doGetBean()方法中会调用AbstractAutowireCapableBeanFactory的createBean()方法去实例化对象,具体的实例化过程又调用了SimpleInstantiationStrategy的instantiate()方法,实现了两种实例化方法,一个Gglib,一个反射。这个过程中对对象的属性的处理过程是在AbstractAutowireCapableBeanFactory的populateBean()方法中。

真正的解析过程是在BeanDefinitionResolver中实现的,在resolveRefrence中,把Bean对象设置到它所依赖的另一个Bean属性中去,具体是通过BeanWrapper的实现类BeanWrapperImpl的setPropertyValues实现。

在Bean的创建和对象依赖注入过程中,需要依据BeanDefinition中的信息来递归地完成依赖注入。这些递归都是以getBean为入口的。一个递归是在上下文体系中查找需要的Bean和创建Bean的递归调用;另一个递归是在依赖注入时,通过递归调用容器的getBean方法,得到当前Bean的依赖Bean,同时也触发对依赖Bean的创建和注入。在对Bean的属性进行依赖注入时,解析的过程也是一个递归的过程。

依赖注入的时序


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值