首页 > 其他分享 >Spring 框架如何创建和解析自定义的 `<mvc:annotation-driven/>` 标签

Spring 框架如何创建和解析自定义的 `<mvc:annotation-driven/>` 标签

时间:2023-12-28 16:12:59浏览次数:32  
标签:XML 自定义 创建 标签 Spring 解析

跟着孙哥学Spring,b站:https://www.bilibili.com/video/BV185411477k/?spm_id_from=333.337.search-card.all.click

Spring 框架如何创建和解析自定义的 <mvc:annotation-driven/> 标签。

1. 创建 BeanDefinitionParser

首先,我们需要创建一个 BeanDefinitionParser 实现类来解析自定义的 XML 元素。

package com.xgh.config;

import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
import org.w3c.dom.Element;

public class XghMvcAnnotationDrivenBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {

    @Override
    protected Class<?> getBeanClass(Element element) {
        return XghMvcAnnotationDriven.class;
    }

    @Override
    protected void doParse(Element element, BeanDefinitionBuilder builder) {
        // 解析自定义属性
        String customAttribute = element.getAttribute("customAttribute");
        builder.addPropertyValue("customAttribute", customAttribute);
    }
}

2. 创建 NamespaceHandler

接下来,我们创建一个 NamespaceHandler 的实现类来注册自定义的 XML 元素解析器。

package com.xgh.config;

import org.springframework.beans.factory.xml.NamespaceHandlerSupport;

public class XghMvcNamespaceHandler extends NamespaceHandlerSupport {

    @Override
    public void init() {
        registerBeanDefinitionParser("annotation-driven", new XghMvcAnnotationDrivenBeanDefinitionParser());
    }
}

3. 创建 XSD 文件

为了使自定义的 XML 元素在 XML 配置文件中得到正确的验证,我们需要提供一个相应的 XSD 文件。以下是 xgh-mvc.xsd 的内容:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.xgh.com/schema/mvc"
           xmlns="http://www.xgh.com/schema/mvc"
           elementFormDefault="qualified">

    <xs:element name="annotation-driven">
        <xs:complexType>
            <!-- 定义元素的属性 -->
            <xs:attribute name="customAttribute" type="xs:string"/>
        </xs:complexType>
    </xs:element>
</xs:schema>

4. 在 Spring 配置文件中使用自定义标签

最后,我们可以在 Spring 的 XML 配置文件中使用自定义的 <mvc:annotation-driven/> 标签:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xgh="http://www.xgh.com/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.xgh.com/schema/mvc classpath:xgh-mvc.xsd">

    <xgh:annotation-driven customAttribute="someValue"/>
</beans>

结论

通过上述步骤,我们成功地创建了一个自定义的 <mvc:annotation-driven/> 标签,并将其解析为相应的 BeanDefinition。这种灵活性使得 Spring 框架能够适应各种各样的需求和场景,为开发者提供了极大的便利性和扩展性。

标签:XML,自定义,创建,标签,Spring,解析
From: https://www.cnblogs.com/zzusjw/p/17932909.html

相关文章

  • day23 SpringCloud应用改造实践 (8.3.1-8.4.1)
    8.3-1-SpringCloud应用改造实践上一、使用SkyWalkingAgentJava中使用agent,提供以下三种方式实现使用官方提供的基础镜像skywalking-base将agent包构建到已经存在的基础镜像中sidecar模式挂载agent(推荐)1.1使用官方提供的基础镜像https://skywalking.apache.org/downlo......
  • 项目启动报错 No Spring Session store is configured: set the ‘spring.session.sto
    NoSpringSessionstoreisconfigured:setthe‘spring.session.store-type‘property项目启动为啥会报这个错误?这个错误信息表明你的SpringBoot应用程序没有配置SpringSession的存储类型。SpringSession是Spring框架提供的一个用于管理HTTP会话的组件,它可以与不同的存储......
  • Spring Boot + MinIO 实现文件切片极速上传技术
    (文章目录)一、引言现代Web应用中,文件上传是一个常见的需求,尤其是对于大文件的上传,如视频、音频或大型文档。为了提高用户体验和系统性能,文件切片上传技术逐渐成为热门选择。本文将介绍如何使用SpringBoot和MinIO实现文件切片极速上传技术,通过将大文件分割成小片段并并行上传,显......
  • [日志] lo4j2之自定义日志格式变量
    1PatternLayout/LogEventPatternConverter:自定义日志格式及格式变量在Log4j或Logback等Java日志框架中,PatternLayout类允许你定义日志输出的格式。PatternLayout通过一系列的转换器(PatternConverter)来定义输出的样式。其中,LogEventPatternConverter(日志格式化......
  • 【SpringBoot零基础入门到项目实战②】安装Java和Maven,创建你的第一个项目
    文章目录导言安装JavaWindows系统macOS系统Linux系统安装和配置MavenWindows系统macOS系统Linux系统配置Maven本地仓库使用阿里镜像加速创建第一个SpringBoot项目拓展学习(提前了解后面会讲到)1.深入理解SpringBoot的项目结构2.学习SpringBoot的自动配置3.掌握SpringBoot......
  • 项目中使用spring.session.store-type=redis和@EnableRedisHttpSession 的区别
    spring项目的session存在哪里SpringSession提供了多种存储策略,可以选择将session存储在内存、数据库或Redis缓存中。内存存储:这是默认的存储方式,适用于单个应用程序的情况。SpringSession会在应用程序启动时创建一个ConcurrentHashMap对象,用于存储session数据。JDBC存......
  • Java 系统学习 | Springboot 写 hello world
    经过一段时间基础学习,现在开始使用Springboot框架完成项目,特地记录一下,方便后续查漏补缺。本篇使用Springboot3框架,IDEA2022编辑器,java17版本。新建项目file->new->project弹框中填入自己的信息Name项目名称Location项目存放路径LanguageJavaB......
  • 如何使用 Prometheus 监控SpringBoot系统
    公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享在从零开始:使用Prometheus与Grafana搭建监控系统中,主要讲解了如何使用监控系统资源并进行告警,这节主要分享下,如何在业务系统中使用Prometheus来监控业务系统指标,业务系统使用SpringBoot构建。我们要......
  • 手把手从安装本地虚拟机,基于docker,部署springboot+vue项目(若依框架前后端分离版本演示
    目录1.安装本地虚拟机centos2.安装docker,拉取镜像,创建容器3.打包部署后端4.配置nginx5.打包部署前端6.常见问题汇总1.安装本地虚拟机centos部署环境提供vm16,和centos7,其中把镜像改成.iso文件就可以了阿里云链接:https://www.alipan.com/s/BTnpjuHWtEp为什么用阿里云,不限速啊,秉......
  • SpringBoot+JaywayJsonPath实现Json数据的DSL(按照指定节点表达式解析json获取指定数
    场景若依前后端分离版手把手教你本地搭建环境并运行项目:若依前后端分离版手把手教你本地搭建环境并运行项目_前后端分离项目本地运行在上面搭建SpringBoot项目的基础上,并且在项目中引入fastjson、hutool等所需依赖后。JaywayJsonPath:GitHub-json-path/JsonPath:JavaJsonPathi......