springIOC的源码流程

springIOC的源码流程

IOC:

  1. IOC是一个容器
  2. 容器启动时创建所有单实例对象
  3. 我们可以直接从容器中获取到这个对象

SpringIOC:

  1. IOC容器的启动过程?启动期间都做了什么(什么时候创建所有单实例bean)
  2. IOC是如何创建这些单实例bean,并如何管理的;到底保存在哪里?

在这里插入图片描述

主要以debug方式将流程走一遍

先创建出Car类,用@Component将Car类注入ioc容器中,在测试类中通过new AnnotationConfigApplicationContext(Car.class);注解方式获取到Car的bean。

debug进去会看到下图

在这里插入图片描述
this.refresh()为主要初始化的方法,调用来至父类AbstractApplicationContext中的模版方法refresh()方法,进入到this.refresh() 后会跳到AbstractApplicationContext类中

在这里插入图片描述
点击this.finishBeanFactoryInitialization(beanFactory)跳转
在这里插入图片描述
前面的判断为检测初始化环境,点击进入beanFactory.preInstantiateSingletons();会进入到DefaultListableBeanFactory

在这里插入图片描述
在这里插入图片描述
循环一次则创建一个bean实例,以上就是ioc容器的创建单实例bean的过程,后续则是getBean的细节部分,测试类中的getBean()也是以下流程,具体细节不一样
点击getBean(BeanName),进入到AbstractBeanFactory类中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
直接进入到getSingleton()方法中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
观察控制台,已经打印了car construction…
在这里插入图片描述
在这里插入图片描述
创建好的对象最终会保存在一个map中;DefaultSingletonBeanRegistry-singletonObjects

发布了2 篇原创文章 · 获赞 1 · 访问量 37
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览