简述
为什么需要自定义Schema?
很多时候我们在使用Spring的过程中会定义一些配置,最简单的比方说定义< bean,使用< aop或者< mvc标签,用过dubbo的小伙伴可能还会用很多的< dubbo:service这样的配置,通常这样的文件要求开发者按照特定的格式、特定的标签去配置需要的内容,这样的文件结构有很多好处:
- 可更容易地描述允许的文档内容
- 可更容易地验证数据的正确性
- 可更容易地定义数据约束(data facets)
- 可更容易地定义数据模型(或称数据格式)
- 可更容易地在不同的数据类型间转换数据
- 可使用 XML 编辑器来编辑 Schema 文件
- 可使用 XML 解析器来解析 Schema 文件
- 可以更容易地保护数据通信
- …
如何自定义Schema?
(1)简单的做法可以直接基于 Spring的标准 Bean 来配置,但配置较为复杂或者需要更多丰富控制的时候,会显得非常笨拙。
(2)使用原生态的方式去解析定义好的 xml 文件,然后转化为配置对象,这种方式当然可以解决所有问题,但实现起来比较繁琐,特别是是在配置非常复杂的时候,解析工作是一个不得不考虑的负担。
(3)Spring 提供了可扩展 Schema 的支持,这是一个不错的折中方案,完成一个自定义配置一般需要以下步骤:
- 设计配置属性和 JavaBean
- 编写 XSD 文件
- 编写 NamespaceHandler 和 BeanDefinitionParser
- 编写 spring.handlers 和 spring.schemas 串联起所有部件
- 在 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) {