Spring(三),为什么数据库会丢失数据

这篇博客探讨了Spring中XML配置文件的验证模式,包括DTD和XSD的区别,以及如何通过XmlBeanDefinitionReader和配置文件获取验证模式。重点讲述了getValidationModeForResource和detectValidationMode方法的工作原理,说明了在没有明确指定验证模式时,默认使用XSD验证。
摘要由CSDN通过智能技术生成

获取XML的验证模式


XML的验证模式保证了XML文件的正确性,比较常用的验证模式主要有两种,DTD和XSD

DTO和XSD验证模式的区别

DTO,称为文档类型定义,是一种XML约束模式语言,同时也

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

是XML的验证机制,验证的机制是通过比较XML文档和DTD文件来看文档是否符合规范

XSD,本身就是XML语言(Xml Scheme Definition),使用一个指定的XMl Scheme来验证某个XML文档,来检查该XML文档是否符合其要求,即XML Scheme可以限制XML文档所允许的结构和内容,并根据此检查XML文档是否有效

而验证模式的定义使用,是放在配置文件的头描述里面的

比如使用XSD

在这里插入图片描述

使用DTD格式的

在这里插入图片描述

验证模式的获取

获取验证模式,其实就是XmlBeanDefinitionReader调用了getValidationModeForResource方法

下面就来看看这个方法的底层

getValidationModeForResource

protected int getValidationModeForResource(Resource resource) {

//获取手动设置的验证模式(XmlBeanDefinitionReader可以设置validationMode)

//也就是从代码层面上进行设置

int validationModeToUse = getValidationMode();

//如果验证模式不是未指定的,就返回获取的验证模式

if (validationModeToUse != VALIDATION_AUTO) {

return validationModeToUse;

}

//如果获取的验证模式是未指定,则需要自动的检测(检测配置文件)

int detectedMode = detectValidationMode(resource);

//如果自动检测后得到的验证模式不是未指定的,返回

if (detectedMode != VALIDATION_AUTO) {

return detectedMode;

}

//如果配置文件上依然没有指定验证模式

//默认使用XSD模式(注释上写的原因是,因为找不到DTD所以使用XSD)

// Hmm, we didn’t get a clear indication… Let’s assume XSD,

// since apparently no DTD declaration has been found up until

// detection stopped (before finding the document’s root tag).

return VALIDATION_XSD;

}

在这里插入图片描述

从这个方法来看,设置验证模式可以有两种方式

  • 通过XmlBeanDefinitionReader来获取validationMode,即从代码上设置validationMode,并且优先级最高

  • 通过配置文件去获取validationMode,优先级最低

  • 如果两个都没有设置,默认使用XSD验证模式

配置文件去获取validationMode(detectValidationMode方法)

对应的方法就是detectValidationMode方法

protected int detectValidationMode(Resource resource) {

//判断配置文件抽象成的resoure是不是open状态的

//如果处于open状态,则不能从该配置文件上读取验证模式

//因为open状态,表示已经被打开了

//被打开了就只能被读取一次然后马上关闭,因为可能会造成资源泄露

if (resource.isOpen()) {

throw new BeanDefinitionStoreException(

“Passed-in Resource [” + resource + "] conta

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值