spring流程
类比
为了了解spring流程,需要接受、了解、熟悉很多未知的定义,在此使用 学校 作为辅助,帮助我们了解spring。
<此版本中只有学校和学生,其他内容后续添加>
学校 | spring |
---|---|
学校管理局 | 开发人员 |
学校信息 | ApplicationContext |
学校人员信息库 | DefaultListableBeanFactory |
人员 | bean |
人员信息 | BeanDefinition |
IOC<控制反转>
学校开学了,学生需要自己上学。如果学生第一天上学不认路走丢了,没有到学校。
学校表示:这跟我没关系,不是我的责任;
家长说:不行,这就是学校的责任。
学校管理局<spring开发人员>说:这就是学校的责任,学校想办法解决。
学校决定:自己出动校车,开学时把所有学生通过校车接到学校,教学生认路。
这就是控制反转:spring 通过反射/其他方式完成对象的实例化。
spring的极简流程
学校需要新建人员信息库保存信息
spring 创建 BeanFactory
AbstractApplicationContext 类中的 obtainFreshBeanFactory 方法,
返回 DefaultListableBeanFactory<学校人员信息库>
学校的人员将个人信息交给学校管理局
学校管理局制定信息规范,要求:
学生家长、老师按照规范提供信息;
学校按照规范自定义规范解析方法<将信息解析为人员信息BeanDefinition,保存到人员信息库DefaultListableBeanFactory>
学校管理局提供信息1.0:xml文件
19世纪教育局<开发人员>定义了xml信息规范。
学生家长、老师提供人员信息规范:
xml文件标签 <bean>
学校自定义xml信息规范解析工具:
xml文件解析器:XmlBeanDefinitionReader
学校管理局提供信息2.0:注解
20世纪教育局<开发人员>定义了注解规范。
学生家长、老师提供人员信息规范:
注解: @Bean、@Component
学校自定义xml信息规范解析工具:
注解解析器:ConfigurationClassParser中扫描@ComponentScan时,会将有@Component注解类,生成BeanDefinition对象
未来教育局提供3.0信息规范:谁知道呢
学校将学校管理局提供信息添加到学校人员信息中
DefaultListableBeanFactory的
beanDefinitionNames 学生名字
beanDefinitionMap key:学生名字;value:学生信息
学校开学,学校校车出动接学生上学
spring启动
spring实例化过程
根据DefaultListableBeanFactory的
beanDefinitionNames和beanDefinitionMap
完成bean的实例化
调用getBean、doGetBean、createBean、doCreateBean完成bean的实例化
其中使用反射方法创建bean时,遵循bean的实例化流程
bean实例化流程
反射完成实例化<极简版本>
1、调用构造方法完成实例化
doCreateBean方法中的createBeanInstance完成bean的实例化
2、调用set方法完成属性注入
doCreateBean方法中的populateBean完成bean的属性注入
3、调用init方法完成初始化
doCreateBean方法中的initializeBean完成bean的初始化
收尾
臭弟弟在 马士兵教学中,看完了连鹏举老师的spring视频,自我总结极简版本spring,有不足之处,可以多多交流。