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

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

文章目录

    • 1、分析关系
    • 2、总结一下

1、分析关系

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

  • 如何在spring自定义命名空间和处理器分析(下)_第1张图片

  • 进一步放大

    • 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注册工作即可。
  • 如何在spring自定义命名空间和处理器分析(下)_第2张图片

2、总结一下

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

##3、工程示例代码

  • 自定命名空间github示例工程

    希望对您有所帮助

你可能感兴趣的:(springframework,spring,namespace,处理器,自定义,分析)