在最近的学习过程中,学到一个经验。就是学习一门技术、看一本书或文章时要先概览全貌,再去抠其细节。在读源码的时候也是这样,先看方法做了哪几个步骤,具体步骤里又做了哪些功能,这是后面再去看。
@Override
public Object getBean(String name) throws BeansException {
return doGetBean(name, null, null, false);
}
- 将入参
name
转换为beanName
- 通过
beanName
去三级缓存中寻找对应的bean实例 - 若缓存中存在相应的bean实例,则通过bean实例获取相关的Object对象
- 若缓存中不存在相应的bean实例
- 情况1:目前的
BeanFactory
中压根都没有BeanDefinition
存在,则调用父级BeanFacorty去获取 - 情况2:目前的
BeanFactory
中有相关BeanDefinition
存在,则创建bean实例并移步到7 - 创建完bean实例后,和第3步一致,也通过bean实例获取相关的Object对象
- 最后如果需要类型转换就进行类型转换