Spring IOC(1)时序图
2020-07-25 本文已影响0人
涣涣虚心0215
Spring IoC时序图
SpringIOC三个核心:
- BeanFactory:Bean的工厂类,提供getBean(), createBean()等方法。
- BeanDefinition:主要是Bean的属性定义,Bean是不是单例还是多实例还是abstract的,以及bean的dependOn。
- BeanDefinitionReader:主要是从resource里去加载beanDefinition,通过BeanDefinitionDocumentParse进行解析,然后通过BeanFactory的registerBeanDefinition注册。
ClassPathResource classPathResource = new ClassPathResource("applicationContext.xml");
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
BeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
reader.loadBeanDefinitions(classPathResource);
Student student = (Student) beanFactory.getBean("student");
System.out.println(student.getName());
这段代码是bean创建的最简单直白的一个流程:
- 通过ClassPathResource读取bean的配置文件。
- 创建一个DefaultListableBeanFactory(实现了BeanDefinitionRegistry)。
- 创建一个XmlBeanDefinitionReader,并关联了DefaultListableBeanFactory。
- 通过XmlBeanDefinitionReader开始加载resource中的bean配置,并生成对应的BeanDefinition,然后register到DefaultListableBeanFactory内部的beanDefinition缓存容器(concurrentHashMap)。
- beanDefinition加载注册完成之后,就可以通过DefaultListableBeanFactory的getBean()来获取bean。
- bean的创建都是在getBean()之中完成的。
该时序图主要关注:Bean创建流程,分析部分AOP proxyBean的代码,分析循环注入问题。
Spring IOC时序图.png