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()
2.obtainFreshBeanFactory()调用了refreshBeanFactory()
3.refreshBeanFactory()调用了loadBeanDefinitions(beanFactory)
4.loadBeanDefinitions()调用了loadBeanDefinitions(beanDefinitionReader)
4.reader解析器调用了loadBeanDefinitions(configLocation)
5.读取xml文件,下一步就是解析xml文件
6.绕了一大圈终于看到真正解析得方法doLoadBeanDefinitions()
解析xml方法doLoadBeanDefinitions()
spring中用的是org.w3c.dom工具类解析XML文件,把整个xml文件转成一个Document对象,然后开始遍历一个一个的bean标签:
1.生成Document对象
2.生成BeanDefinitionDocumentReader对象遍历Document
3. 从Document的根元素beans标签开始解析
4.遍历每一个bean标签元素
5.解析每一个bean元素标签的信息
6.解析并注册进beanDefinitionMap(就是一个map)
7.解析bean标签的每一个配置信息(方法parseBeanDefinitionElement)
总结
关于BeanDefinition的解析,今天就到这!!!