Spring 系列(五)Bean创建流程

  • 通过之前的“Spring IOC容器初始化主体流程”中的关健节点分析,我们知道Bean创建子流程入口在AbstractApplicationContext#refresh()中的
    finishBeanFactoryInitialization(beanFactory)处。


  • 进入了finishBeanFactoryInitialization
        // Stop using the temporary ClassLoader for type matching.
        beanFactory.setTempClassLoader(null);

        // Allow for caching all bean definition metadata, not expecting further changes.
        beanFactory.freezeConfiguration();

        // Instantiate all remaining (non-lazy-init) singletons.
        // 实例化所有立即加载的单例bean
        beanFactory.preInstantiateSingletons();
  • 继续进⼊DefaultListableBeanFactory类的preInstantiateSingletons⽅法,我们找到下⾯部分的代码,看到⼯⼚Bean或者普通Bean,最终都是通过getBean的⽅法获取实例


  • 继续跟踪下去,我们进⼊到了AbstractBeanFactory类的doGetBean⽅法,这个⽅法中的代码很多,我们直接找到核⼼部分


  • 接着进⼊到AbstractAutowireCapableBeanFactory类的⽅法,找到以下代码部分


  • 进⼊doCreateBean⽅法看看,该⽅法我们关注两块重点区域
    1. 创建Bean实例,此时未设置属性


    2. 给Bean填充属性,调用初始化方法,应用BeanPostProcessor后置处理器


你可能感兴趣的:(Spring 系列(五)Bean创建流程)