xml解析和BeanDefinition封装核心方法 refreshBeanFactory()
2020-06-28 10:30:08 9 举报
xml解析和BeanDefinition封装核心方法 refreshBeanFactory()
作者其他创作
大纲/内容
doLoadBeanDefinitions
委托模式
delegate.parseCustomElement
创建XmlBeanDefinitionReader对象
loadBeanDefinitions(beanFactory)
返回BeanFactory
2、解析bean标签的属性,并把解析出来的属性设置到BeanDefinition对象中
1、doRegisterBeanDefinitions
2、根据bean的子标签,形如:<aop:scoped-proxy/>对BeanDefinitionHolder装饰
3、解析bean中的meta标签
loadBeanDefinitions
该方法功能不重要,设计模式重点看一下,装饰者设计模式,加上SPI设计思想
完成对BeanDefinition对象的注册过程,beanDefinitionNames容器要牢记,后面实例化过程要用到
委托给Reader进行xml解析
把流对象封装成InputSource对象,这个是JDK中的sax解析对象
解析xml,并把xml中的标签封装成BeanDefinition对象
BeanDefinitionParserDelegate
1、doLoadDocument
1、parseBeanDefinitionElement
registerBeanDefinitions
registerBeanDefinition
AbstractRefreshableApplicationContext
getBeanFactory()
从Resource对象中后去文件流对象
2、registerBeanDefinitions
4、解析bean中的lookup-method标签
7、解析bean中的property标签
6、解析bean中的constructor-arg标签
AbstractApplicationContext.obtainFreshBeanFactory
5、解析bean中的replaced-method标签
AbstractBeanDefinitionReader
3、根据namespaceUri从映射关系中获取NamespaceHandler处理类
4、processBeanDefinition
自定义标签解析
5、调用NamespaceHandler的parse方法开始真正标签解析过程
DefaultListableBeanFactory
2、decorateBeanDefinitionIfRequired
AbstractXmlApplicationContext
1、创建GenericBeanDefinition对象
refreshBeanFactory()
DefaultBeanDefinitionDocumentReader
XmlBeanDefinitionReader
字符串类型的xml文件路径,转换成Resource对象,这里涉及到模糊匹配,形如:classpath*:user/**/*-context.xml
3、parseDefaultElement
parseBeanDefinitionElement
创建BeanDefinitionDocumentReader对象,专门负责解析Document对象。委托模式
根据InputSource,通过JDK的SAX解析,生成Document对象
2、加载META-INF/spring.handlers配置文件,建立映射关系
1、获取标签的namespaceUri
loadBeanDefinitions( encodedResource)
默认标签解析
2、parseBeanDefinitions
4、调用NamespaceHandler的init方法完成,标签解析类的注册
xml解析器对象,这里用到了委托模式
0 条评论
下一页