基于Spring的扩展Schema配置

本文介绍了为何需要自定义Spring Schema,以及如何通过设计配置属性、编写XSD文件、实现NamespaceHandler和BeanDefinitionParser来扩展Spring的Schema。通过一个具体的案例,详细阐述了从设计到实现的完整过程,并提出了在Schema配置中遇到的问题,如xmlns和targetNamespace的区别以及Spring查找Schema的规则。
摘要由CSDN通过智能技术生成

简述

为什么需要自定义Schema?

很多时候我们在使用Spring的过程中会定义一些配置,最简单的比方说定义< bean,使用< aop或者< mvc标签,用过dubbo的小伙伴可能还会用很多的< dubbo:service这样的配置,通常这样的文件要求开发者按照特定的格式、特定的标签去配置需要的内容,这样的文件结构有很多好处:

  • 可更容易地描述允许的文档内容
  • 可更容易地验证数据的正确性
  • 可更容易地定义数据约束(data facets)
  • 可更容易地定义数据模型(或称数据格式)
  • 可更容易地在不同的数据类型间转换数据
  • 可使用 XML 编辑器来编辑 Schema 文件
  • 可使用 XML 解析器来解析 Schema 文件
  • 可以更容易地保护数据通信

如何自定义Schema?

(1)简单的做法可以直接基于 Spring的标准 Bean 来配置,但配置较为复杂或者需要更多丰富控制的时候,会显得非常笨拙。

(2)使用原生态的方式去解析定义好的 xml 文件,然后转化为配置对象,这种方式当然可以解决所有问题,但实现起来比较繁琐,特别是是在配置非常复杂的时候,解析工作是一个不得不考虑的负担。

(3)Spring 提供了可扩展 Schema 的支持,这是一个不错的折中方案,完成一个自定义配置一般需要以下步骤:


  1. 设计配置属性和 JavaBean
  2. 编写 XSD 文件
  3. 编写 NamespaceHandler 和 BeanDefinitionParser
  4. 编写 spring.handlers 和 spring.schemas 串联起所有部件
  5. 在 Bean 文件中应用

基于Spring的Schema扩展案例

(1)编写需要解析的bean:

public class ProviderParameter implements Serializable {
   
    private String interfaceName;
    private String host;
    private Integer port;
    public String getInterfaceName() {
        return interfaceName;
    }
    public void setInterfaceName(String interfaceName) {
        this.interfaceName = interfaceName;
    }
    public String getHost() {
        return host;
    }
    public void setHost(String host) {
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值