zoukankan      html  css  js  c++  java
  • 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.

    支付宝扫一扫,为女程序员打赏!
    作者:梦幻朵颜
    版权:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    vue.js多选列表(绑定到一个数组)
    vue.js选择列表
    vue.js单选按钮
    Vue.js逆转消息
    TTL
    [转]为何需要调用“super viewDidLoad
    Tomcat 发布war包提示war包超出大小修改
    【转】 MySQL与PostgreSQL:该选择哪个开源数据库?哪一个更好?
    【转】 #1451
    【转】互联网网页响应速度测试标准
  • 原文地址:https://www.cnblogs.com/zhuwenjoyce/p/15579030.html
Copyright © 2011-2022 走看看