依赖注入之Bean实例化前的准备

IOC容器虽然已经构造好,但现在的容器只是一个壳,对象间的依赖关系还未进行填充。那么接下来便分析填充依赖关系的过程,即依赖注入。依赖注入主要有两个过程,一个是实例化Bean,另一个是将依赖关系注入到Bean中。
依赖注入的入口是我们熟悉的getBean方法。
这里写图片描述
AbstractBeanFactory的doGetBean方法是具体实现依赖注入的地方
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
方法中的代码较多,该从哪里分析起呢?上一篇分析到了将配置文件解析后的BeanDefinition保存到了容器中,并且beanName的别名也保存到了容器中,既然保存起来了,肯定就是要用的,不然保存干嘛它干嘛呢?那么就从beanName的别名使用开始分析起,也就是transformedBeanName方法。进入transformedBeanName的具体实现canonicalName方法
这里写图片描述
这个方法的作用是根据传入的别名获取beanName,别名的注册过程分析请看上一篇文章。这个方法也解释了在注册别名的时候,为什么名字和别名相同的时候要从aliasMap删掉别名项。如果存在别名和名字相同的情况,这个canonicalName方法在依赖注入的时候就显得有些多余了。
接着往下看,获取到beanName之后,根据beanName从缓存或者ObjectFactory中获取Bean。
别名的使用刚已分析,接下来看BeanDefinition的使用。BeanDefinition的具体使用在getMergedLocalBeanDefinition方法中。
这里写图片描述
进入getBeanDefinition方法
这里写图片描述
前面保存在IOC容器中的BeanDefinition在这里被取了出来,并且被转换成了RootBeanDefinition类型,并且在转换的过程中如果BeanDefinition的父类不为空,则把父类的属性也合并到RootBeanDefinition中,所以getMergedLocalBeanDefinition方法的作用就是获取缓存的BeanDefinition对象并合并其父类和本身的属性。
接下来通过递归的方式获取当前Bean的所有依赖Bean。
这里写图片描述
分析到这里,Bean实例化前的准备工作已经差不多了。鉴于Bean实例化过程非常复杂,因此决定在下一篇中单独分析。
未完待续。。。。。。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值