如何在spring自定义命名空间和处理器分析(下)

上文已经翻译大神的文档了,现在我分析一下,照葫芦画瓢也自己定义命名空间处理器玩一玩

1、分析关系

  • 现在我们有xml标签文件,schema文件,java文件怎么进行关联,怎么关系

  • image-20210424115128816

  • 进一步放大

    • 1、beans.xml 它怎么知道约束它schema?
      • 主要是位于beans属性中xsi:schemaLocation中有配置 http://www.codelooru.com/custns.xsd
      • 它关联到 spring.schemas中属性配置文件,然后这个配置将这个url指向本工程的schema.xsd文件。(当然看schemas后面的s说明可以配置多个对应关系)
      • 这样beans.xml就可以找到shema文件,同时schema也要知道自己约束命名空间那个?所以它也有targetNamespace属性配置
    • 2、schema的对应处理器,spring是如何知道呢?
      • 主要是位于beans属性中xsi:schemaLocation中有配置 http://www.codelooru.com/custns
      • 它关联到 spring.handlers中属性配置文件,然后这个配置将这个url指向本工程对应处理器(当然看handlers后面的s说明可以配置多个对应关系)
      • 其实spring应该可以知道这个处理器是哪一个,因为beans.xml已经告诉他,我觉得应该是统一管理而不是被动收集,所以我还需要将我自定义处理器注入到spring容器,告诉他,遇到这样命名空间的标签请让我处理,也就是继承NamespaceHandlerSupport抽象类。
    • 3、spring又是如何提供接口支持自定义呢?
      • 最小职责原则,你不用关心,spring怎么那么xml的对应dom的标签,你只需知道我现在已经拿到这样一个标签,你需要解析标签中元素,然后你做你自定义bean注册工作即可。
  • image-20210425104955915

2、总结一下

  • 我们是不是可以猜想,其他spring的处理器是不是配置在spring.handlers中,spring会读取这个文件
  • 为啥需要spring.schemas文件进行关系配置呢?直接写在beans.xml不是很好吗?
    • 应该是解耦关系,那么我想要变更schema的版本,怎么处理呢?如果不是写在配置文件中,那么需要修改所有beans.xml文件
    • 方便管理和查看,也就具有可读性和维护性
  • 使用场景:如果普通那bean标签不能满足你的要求,或者你想简化你配置,自定义一些模板,也是不错的选择。
  • 进一步扩展,当然不限于xml格式文件其他文件和解析功能,比如excel表格呢,是不是可以模板进行约束,创建handler,然后注入handler等步骤,抽象为责任链的一种模式,各司其职,spring源码中也会有大量这样情况,各种handler横行情况
  • image-20210425112550701

##3、工程示例代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值