spring解析XML中的Bean

关于Bean的理解

spirng伟大之处在于自定义了一个Bean的概念,在这个概念拓展出来了一套类的治理理念,包括Bean的生命周期,IOC,AOP等一系列概念,而spring想接管我们业务类的治理,第一步就是扫描出包下所有的业务类,早期spring是通过xml配置,后期就是通过注解方式配置。

BeanDefinition的作用

spring会在启动的时候,把所有类的类全名,类的配置属性都会扫描到内存中,以方便后面实例化对象的时候不用每次到xml文件里面进行IO读取,这一步也就是传说中的xml解析,解析到的每一个Bean的配置都会保存到BeanDefinition中,里面保存了类全名,类字节码,初始化方法等信息。

从refresh方法开始

业务类转概念换成spring中的Bean概念,这得从refresh方法开始看起
1.入口点obtainFreshBeanFactory()
spring解析XML中的Bean
2.obtainFreshBeanFactory()调用了refreshBeanFactory()
spring解析XML中的Bean
3.refreshBeanFactory()调用了loadBeanDefinitions(beanFactory)
spring解析XML中的Bean
4.loadBeanDefinitions()调用了loadBeanDefinitions(beanDefinitionReader)
spring解析XML中的Bean
4.reader解析器调用了loadBeanDefinitions(configLocation)
spring解析XML中的Bean
5.读取xml文件,下一步就是解析xml文件
spring解析XML中的Bean
6.绕了一大圈终于看到真正解析得方法doLoadBeanDefinitions()
spring解析XML中的Bean

解析xml方法doLoadBeanDefinitions()

spring中用的是org.w3c.dom工具类解析XML文件,把整个xml文件转成一个Document对象,然后开始遍历一个一个的bean标签:
1.生成Document对象
spring解析XML中的Bean
2.生成BeanDefinitionDocumentReader对象遍历Document
spring解析XML中的Bean
3. 从Document的根元素beans标签开始解析
spring解析XML中的Bean
4.遍历每一个bean标签元素
spring解析XML中的Bean
5.解析每一个bean元素标签的信息
spring解析XML中的Bean
6.解析并注册进beanDefinitionMap(就是一个map)
spring解析XML中的Bean
7.解析bean标签的每一个配置信息(方法parseBeanDefinitionElement)
spring解析XML中的Bean

总结

关于BeanDefinition的解析,今天就到这!!!