在最近的学习过程中,学到一个经验。就是学习一门技术、看一本书或文章时要先概览全貌,再去抠其细节。在读源码的时候也是这样,先看方法做了哪几个步骤,具体步骤里又做了哪些功能,这是后面再去看。

    1. @Override
    2. public Object getBean(String name) throws BeansException {
    3. return doGetBean(name, null, null, false);
    4. }
    1. 将入参name转换为beanName
    2. 通过beanName三级缓存中寻找对应的bean实例
    3. 若缓存中存在相应的bean实例,则通过bean实例获取相关的Object对象
    4. 若缓存中不存在相应的bean实例
    5. 情况1:目前的BeanFactory中压根都没有BeanDefinition存在,则调用父级BeanFacorty去获取
    6. 情况2:目前的BeanFactory中有相关BeanDefinition存在,则创建bean实例并移步到7
    7. 创建完bean实例后,和第3步一致,也通过bean实例获取相关的Object对象
    8. 最后如果需要类型转换就进行类型转换