随笔 - 239  文章 - 0  评论 - 29  阅读 - 69万

spring5源码--xml配置文件中的自定义标签解析

Spring中有个DefaultNamespaceHandlerResolver类,默认处理namespace的类,也包含自定义namespace,在该类的getHandlerMappings()方法中PropertiesLoaderUtils.loadAllProperties(this.handlerMappingsLocation 加载完成之后是Properties这种key value结构,这个handlerMappingsLocation的值是spring.handlers

在spring.handlers文件中找到url 对应的解析类:org.springframework.context.config.ContextNamespaceHandler extends NamespaceHandlerSupport  可以看到继承了spring的一个空间解析类。

 

通过以上的图中关系,最后spring构建出每一个uri标签所对应的解析类封装成一个Map<String,Object>,然后每个uri标签解析类中的init方法体里再定义这个标签的内部各个属性的解析类,像context: 自定义标签的各个属性解析类是这样注册的:

component-scan 属性值是一个包地址,spring会用doScan方法扫描该包地址下所有的class文件:
    1 去扫描基本包的路径,找class文件
    2 递归找.class文件
    3 判断.class文件里面是否有注解,includeFilter里面的注解@Component, 像其他的@Controller @Service @Repository 都是继承自@Component
    4 变成beanDefinition对象

 

所有的步骤,到最后都是为了生成一个BeanDefinition对象,而一个BeanDefinitionHolder里由三个对象组成:BeanDefinition; beanName; aliasesArray

 

end.

posted on   梦幻朵颜  阅读(129)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架

点击右上角即可分享
微信分享提示