springIOC的源码流程
IOC:
- IOC是一个容器
- 容器启动时创建所有单实例对象
- 我们可以直接从容器中获取到这个对象
SpringIOC:
- IOC容器的启动过程?启动期间都做了什么(什么时候创建所有单实例bean)
- IOC是如何创建这些单实例bean,并如何管理的;到底保存在哪里?
将Car类注入ioc容器中,在通过new AnnotationConfigApplicationContext(Car.class);注解方式获取到Car的bean。
主要调用来至父类AbstractApplicationContext中的模版方法refresh()方法,进入到this.refresh() 后会跳到AbstractApplicationContext类中
点击this.finishBeanFactoryInitialization(beanFactory)跳转
点击进入beanFactory.preInstantiateSingletons();会进入到DefaultListableBeanFactory
循环一次则创建一个bean实例,以上就是ioc容器的创建单实例bean的过程,后续则是getBean的细节部分,
点击getBean(BeanName),进入到AbstractBeanFactory类中
直接进入到getSingleton()方法中
观察控制台,已经打印了car construction…
创建好的对象最终会保存在一个map中;DefaultSingletonBeanRegistry-singletonObjects