背景简介
出现的原因
我们上面介绍了NameSpaceHandlerResolver
系列的东西,它的职责就是命名空间的注册与管理,接下来我们介绍命名空间的基本功能支持与实现方法。我们先从NameSpaceHandler
开始。
职责
负责对应命名空间元素节点的相关解析操作。
注意点
没啥
源码
初始化
void init();
命名空间初始化,此方法主要进行在开始工作前的准备工作。会在NameSpaceHandlerResolver
第一次加载并实例化本NameSpaceHandler
时使用,但是这种加载是懒加载,也就是说只有在解析到这个命名空间的第一个节点时才会用到并进行类加载、初始化等一系列操作。
解析
BeanDefinition parse(Element element, ParserContext parserContext);
根据入参元素和上下文进行解析,并在上下文带来的BeanDefinitionRegistry
中完成注册。
将生成的 BD 返回方便调用者进行统计或者其他操作。
装饰
BeanDefinitionHolder decorate(Node source, BeanDefinitionHolder definition, ParserContext parserContext);
对生成的 BD 进行装饰,可以返回一个权限的 BDH。【入参的 node 可能是子节点也可能是目标节点】
入参有上下文参数,可以选择在里面进行 BD 的注册。
如果有修改,需要自行进行注册操作。
总结
定义的方法总体分成两类:
- 一类是准备工作的方法
- 一类是提供功能的方法
注意:第二类方法要做的一般有三件事
- 进行直接的操作,或者是节点解析或者是解析加修饰
- 进行 BD 的注册
- 将生成/装饰好的东西返回
网友评论