浅谈Spring的BeanDefinitionParser的触发流程

首先需要了解Spring的自定义标签的实现。通过继承NamespaceHandlerSupport 注册parser。下面简单谈谈其中的触发流程

在ApplicationContext的refresh方法中

《浅谈Spring的BeanDefinitionParser的触发流程》

首先是通过obtainFreshBeanFactory进行beanFactory的初始化创建,里面会读取xml进行解析

《浅谈Spring的BeanDefinitionParser的触发流程》

refreshBeanFactory才是干正事的。。

《浅谈Spring的BeanDefinitionParser的触发流程》

获取beanDefinitionReader准备开始解析

《浅谈Spring的BeanDefinitionParser的触发流程》

这边的loadBeanDefinitions会千回路转,九曲十八弯般最终调用的是XmlBeanDefinitionReader的loadBeanDefinitions。

《浅谈Spring的BeanDefinitionParser的触发流程》

一如既往的干正事do开头

《浅谈Spring的BeanDefinitionParser的触发流程》

《浅谈Spring的BeanDefinitionParser的触发流程》

这边会先从document中拿到root然后开始解析

《浅谈Spring的BeanDefinitionParser的触发流程》

《浅谈Spring的BeanDefinitionParser的触发流程》

这边会判断下是否为默认的标签比如bean啥的。。如果是增强或者自定义的则走parseCustomElement

《浅谈Spring的BeanDefinitionParser的触发流程》

这边会拿到url然后去决定是哪个NamespaceHandler,再调用他的parse方法,例如:mvc 那就是MVCNamespaceHandler

《浅谈Spring的BeanDefinitionParser的触发流程》

获取对应的parserForElement 然后调用parse,例如:interceptors 所以对应的parse自然是InterceptorsBeanDefinitionParser

《浅谈Spring的BeanDefinitionParser的触发流程》

end

    原文作者:Spring MVC
    原文地址: https://blog.csdn.net/boneix/article/details/70075657
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞