微信搜索【程序员囧辉】,关注这个坚持分享技术干货的程序员。
目录
ComponentScanBeanDefinitionParser.parse
代码块10:postProcessBeanDefinition
代码块11:processCommonDefinitionAnnotations
代码块17:registerAnnotationConfigProcessors
Spring IoC源码学习全系列
Spring IoC源码学习:ApplicationContext 刷新前的配置
Spring IoC源码学习:obtainFreshBeanFactory详解
Spring IoC源码学习:parseDefaultElement详解
Spring IoC源码学习:parseCustomElement详解
Spring IoC源码学习:context:component-scan 节点详解
Spring IoC源码学习:invokeBeanFactoryPostProcessors详解
Spring IoC源码学习:registerBeanPostProcessors详解
Spring IoC源码学习:finishBeanFactoryInitialization详解
Spring IoC源码学习:createBean详解(上)
Spring IoC源码学习:createBean详解(下)
Spring IoC源码学习:finishRefresh 详解
前言
在 Spring IoC:parseCustomElement详解 中,我们介绍了自定义命名空间节点解析的大部分内容,但是还剩下节点解析的具体过程。本文将以 <context:component-scan /> 节点为例子,介绍自定义命名空间 context 的 component-scan 节点的解析过程。
正文
首先,我们回到 Spring IoC:parseCustomElement详解 中的代码块5:NamespaceHandlerSupport.parse方法,代码如下。
@Override
public BeanDefinition parse(Element element, ParserContext parserContext) {
// 1.findParserForElement: 给element寻找对应的BeanDefinition解析器
// 2.使用BeanDefinition解析器解析element节点
return findParserForElement(element, parserContext).parse(element, parserContext);
}
当 element 为 <context:component-scan /> 节点时,findParserForElement(element, parserContext) 会返回 ComponentScanBeanDefinitionParser,接着执行 ComponentScanBeanDefinitionParser.parse 方法。
ComponentScanBeanDefinitionParser.parse
@Override
pub