springboot自定义xml文件解析

author author     2023-03-23     264

关键词:

参考技术A 有时候,要通过自定义XML配置文件来实现一些特定的功能。这里通过例子来说明。

首先,看部分spring加载bean文件的源码:
spring-beans-5.0.6.RELEASE.jar!/org/springframework/beans/factory/xml/PluggableSchemaResolver.class :

spring-beans-5.0.6.RELEASE.jar!/org/springframework/beans/factory/xml/DefaultNamespaceHandlerResolver.class :

可以看出,spring在加载xml文件的时候,会默认读取配置文件 META-INF/spring.schemas 和 META-INF/spring.handlers 。这样,我们就可以在这两个文件添加我们自定义的xml文件格式和xml文件解析处理器。

新建一个Springboot工程,pom如下。
SelfDefineXmlTrial/pom.xml :

然后,新建一个用于测试controller。
com.lfqy.springboot.selfdefxml.controller.SelfDefXmlController :

最后,创建一个Springboot的启动类。
com.lfqy.springboot.selfdefxml.SelfDefXmlApplication :

运行启动之后,浏览器访问 http://localhost:8080/selfdefxml/hello 效果如下:

修改前面提到的配置文件 META-INF/spring.schemas 、 META-INF/spring.handlers ,添加xml格式说明。
META-INF/spring.schemas :

META-INF/spring.handlers :

添加xml格式说明配置文件。
META-INF/selfdef.xsd :

添加自定义xml格式处理器类。
com.lfqy.springboot.selfdefxml.selxmlparse.UserNamespaceHandler :

新增xml格式解析类。
com.lfqy.springboot.selfdefxml.selxmlparse.UserBeanDefinitionParser :

新增自定义xml对应的bean类。
com.lfqy.springboot.selfdefxml.beans.User :

添加自定义xml配置文件读取的相关逻辑。
com.lfqy.springboot.selfdefxml.SelfDefXmlApplication :

到这里,编码就完成了,工程的目录结构如下。

运行之后,控制台输出如下:

这里,通过实现一个启动时自动初始化的一个servlet来实现。

com.lfqy.springboot.selfdefxml.servlet.StartupServlet :

在启动时加载servlet,为了方便区分,这里新写一个启动类。
com.lfqy.springboot.selfdefxml.SelfDefXmlLoadOnStartupApplication

到这里,编码已经完成,工程的目录结构如下:

运行之后,控制台输出如下:

曹工说springboot源码--spring解析xml文件,到底从中得到了什么(util命名空间)

写在前面的话相关背景及资源:曹工说SpringBoot源码(1)--BeanDefinition到底是什么,附spring思维导图分享曹工说SpringBoot源码(2)--BeanDefinition到底是什么,咱们对着接口,逐个方法讲解曹工说SpringBoot源码(3)--手动注册BeanDefinition... 查看详情

springboot分环境导出自定义xml配置

背景介绍:   由于新的springboot项目需要使用老的jar包,老的jar包的配置是用xml方式配置的,而且开发development、测试test、集成off、正式production环境都会有所不同,这种时候我们就需要让springboot分环境加载不同的xml配... 查看详情

曹工说springboot源码--spring解析xml文件,到底从中得到了什么(context命名空间上)

写在前面的话相关背景及资源:曹工说SpringBoot源码(1)--BeanDefinition到底是什么,附spring思维导图分享曹工说SpringBoot源码(2)--BeanDefinition到底是什么,咱们对着接口,逐个方法讲解曹工说SpringBoot源码(3)--手动注册BeanDefinition... 查看详情

springboot源码解析##如何自定义starter让springboot扫描到你的配置

  配置factories文件,然后让spring去扫描到  查看详情

曹工说springboot源码(16)--spring从xml文件里到底得到了什么(aop:config完整解析上)

写在前面的话相关背景及资源:曹工说SpringBoot源码(1)--BeanDefinition到底是什么,附spring思维导图分享曹工说SpringBoot源码(2)--BeanDefinition到底是什么,咱们对着接口,逐个方法讲解曹工说SpringBoot源码(3)--手动注册BeanDefinition... 查看详情

springboot自定义参数解析器(代码片段)

springboot自定义参数解析器1.前言2.springMVC参数解析器3.如何自定义参数解析器4测试1.前言1.springMVC是如何把参数解析完毕后注入到controller方法参数上的呢?在javaweb阶段,我们都学过使用HttpServletRequest这个对象获取参数࿰... 查看详情

曹工说springboot源码(19)--spring带给我们的工具利器,创建代理不用愁(proxyfactory)(代码片段)

写在前面的话相关背景及资源:曹工说SpringBoot源码(1)--BeanDefinition到底是什么,附spring思维导图分享曹工说SpringBoot源码(2)--BeanDefinition到底是什么,咱们对着接口,逐个方法讲解曹工说SpringBoot源码(3)--手动注册BeanDefinition... 查看详情

springboot自定义tomcat添加黑白名单

...设置allow即可黑名单设置deny即可deny的优先级比allow要高。SpringBoot内嵌的tomcat是一个应用一个context,无法在xml文件里配置。如果想启用黑白名单,就需要自定义tomcat,设置context获得容器后可以直接设置context,为context添加Value即可... 查看详情

springboot配置文件详解(告别xml)

参考技术A快速学会和掌握SpringBoot的核心配置文件的使用。SpringBoot提供了丰富的外部配置,常见的有:其中核心配置文件我们并不陌生,主要以Key-Value的形式进行配置,其中属性Key主要分为两种:在application.properties添加配置如... 查看详情

springboot读取自定义的yml文件中的list对象

Yml文件(novellist.xml)如下:novellist: list:   -name:笑傲江湖     type:武侠     master:令狐冲     author:金庸   查看详情

自定义类库:java转换xml文件转化pojo工具

一、之前java读取xml配置文件时,总是通过dom4j第三方库主动解析,最近发现可以通过jdk类库将xml转换pojo。二、编写xml转化工具类XmlUtilspackagecom.moy.demo.common.utils;importjavax.xml.bind.JAXBContext;importjavax.xml.bind.Unmarshaller;importjava.io.Input 查看详情

springboot源码解析-自定义系统初始化器

...能不能看到,我就不管了,哈哈概述  本系列主要分析springboot启动过程中干了什么事情,尽量以白话的形式写出来,因为本人也很小白,望包涵。  系统初始化器是spr 查看详情

springboot–自定义propertyeditor

前言PropertyEditor最初是属于JavaBean规范定义的,有意思的是,Spring也大规模的使用了PropertyEditors,以便实现以各种形式展现对象的属性;举个例子,常见的用于解析Http请求参数,通常需要在展现层把原始Java对象解析成对人友好的... 查看详情

在 Java 中解析各种自定义 XML 文档的最佳方法

】在Java中解析各种自定义XML文档的最佳方法【英文标题】:BestmethodtoparsevariouscustomXMLdocumentsinJava【发布时间】:2010-09-0614:10:48【问题描述】:用Java解析多个离散的自定义XML文档的最佳方法是什么?【问题讨论】:向我们展示你... 查看详情

如何自定义配置源交给springboot管理

概述我们知道,在Springboot中可以通过xml或者@ImportResource来引入自己的配置文件,但是这里有个限制,必须是本地,而且格式只能是properties(或者yaml)。那么,如果我们有远程配置,如何把他引入进来来呢。如果有兴趣可以看另外... 查看详情

springboot自定义start解析(start中配置从数据源)(代码片段)

​在springboot相比于springmvc提供了一个极为重要的功能,就是自定义start(自定义jar包),同时spring也提供了一大波start。如spring-boot-starter-data-redis,spring-boot-starter-amqp。本文将教你如何自定义start。例子为从star... 查看详情

springboot自定义start解析(start中配置从数据源)(代码片段)

​在springboot相比于springmvc提供了一个极为重要的功能,就是自定义start(自定义jar包),同时spring也提供了一大波start。如spring-boot-starter-data-redis,spring-boot-starter-amqp。本文将教你如何自定义start。例子为从star... 查看详情

xml的约束与xml/html的解析

...:ExtensibleMarkupLanguage可扩展标记语言可扩展:标签都是自定义的。功能存储数据配置文件在网络中传输xml与html的区别xml标签都是自定义的,html标签是预定义。xml的语法严格,html语法松散xml是存储数据的,html是展示数据w3c:万维... 查看详情