首页 > 其他分享 >自定义标签完成解析工作

自定义标签完成解析工作

时间:2023-09-23 18:55:06浏览次数:41  
标签:password String 自定义 标签 email import org 解析 public

1、创建实体类

User.java

package com.mashibing.selftag;

public class User {

private String username;
private String email;
private String password;

public User() {
}

public User(String username, String email, String password) {
this.username = username;
this.email = email;
this.password = password;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}
}
2、自定义解析器,继承AbstractSingleBeanDefinitionParser
UserBeanDefinitionParser.java
package com.mashibing.selftag;

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

public class UserBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {

//返回属性值所对应的现象
@Override
protected Class<?> getBeanClass(Element element) {
return User.class;
}

@Override
protected void doParse(Element element, BeanDefinitionBuilder builder) {
// 获取标签具体的属性值
String userName=element.getAttribute("userName");
String email=element.getAttribute("email");
String password=element.getAttribute("password");

if(StringUtils.hasText(userName)){
builder.addPropertyValue("username",userName);
}

if(StringUtils.hasText(email)){
builder.addPropertyValue("email",email);
}

if(StringUtils.hasText(password)){
builder.addPropertyValue("password",password);
}
}
3、自定义解析器的处理器,继承NamespaceHandlerSupport
UserNamespaceHandler.java

package com.mashibing.selftag;

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

public class UserNamespaceHandler extends NamespaceHandlerSupport {
@Override
public void init() {
registerBeanDefinitionParser("user",new UserBeanDefinitionParser());
}
}
4、
自定义配置文件spring.handlers、spring.schemas
spring.handlers
http\://www.mashibing.com/schema/user=com.mashibing.selftag.UserNamespaceHandler
spring.schemas
http\://www.mashibing.com/schema/user.xsd=META-INF/user.xsd
5、配置applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:msb="http://www.mashibing.com/schema/user"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.mashibing.com/schema/user
http://www.mashibing.com/schema/user.xsd
">
<msb:user id="msb" userName="qiangShan" email="[email protected]" password="root123456"></msb:user>

</beans>
6、编写测试类TestSelfTag.java
TestSelfTag.java
import com.mashibing.selftag.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestSelfTag {

@Test
public void test(){
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
User user =(User) context.getBean("msb");
System.out.println("username"+user.getUsername()+" "+"email"+user.getEmail());
}
}


标签:password,String,自定义,标签,email,import,org,解析,public
From: https://www.cnblogs.com/shanqiang1/p/17724898.html

相关文章

  • 记录--a标签跳转新地址无法访问,但手动输入新地址可以访问
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助问题描述最近遇到一个有意思的问题,项目中有一个地方,点击需要跳转到一个新的域名地址笔者使用a标签做跳转,跳是跳过去了,可是跳过去以后,反而打不开了,显示403佛伯乐蛤?大致这样的代码:<ahref="http://abcdefg.com......
  • spring事务控制的原理解析2
    上一篇:[spring事务控制的原理解析1](https://www.cnblogs.com/chengxuxiaoyuan/p/16581334.html)上一篇中总结了在spring中事务控制的基本原理,这一篇来记录下在spring源码中是如何实现的。一、TransactionInterceptorspring中的事务控制是通过aop实现的,提到aop肯定会有一个......
  • elasticsearch 自定义字典
    ......
  • Vue-插槽及自定义事件分发
    一.插槽slot在某些场景中,我们可能想要为子组件传递一些模板片段,让子组件在它们的组件中渲染这些片段。<slot> 元素是一个插槽出口 (slotoutlet),标示了父元素提供的插槽内容 (slotcontent)将在哪里被渲染。 插槽就好比一个占位符,它不是解决页面必须元素的位置,而是解决未......
  • 【Java 基础篇】Java 接口全面解析:简化多态性与代码组织
    接口(Interface)是Java面向对象编程中的一个重要概念。它允许定义一组抽象方法,这些方法可以被实现类(类)实现。接口提供了一种规范,规定了实现类必须提供哪些方法,但不关心具体的实现细节。本篇博客将深入探讨Java中接口的概念、语法和实际应用,适用于初学者,帮助你轻松理解和应用接口......
  • 【Java 基础篇】Java 比较器排序:精通自定义对象排序
    在Java编程中,排序是一个非常常见且重要的操作。Java提供了多种排序机制,其中之一就是使用比较器(Comparator)进行排序。比较器允许您自定义对象的排序方式,使您能够实现各种排序需求,从简单的对象排序到复杂的多属性排序。本篇博客将从入门到高级,详细介绍Java比较器排序的使用。什......
  • avformat_network_init()解析备忘
    基于ffmpeg-6.0.avformat_network_init()函数定义如下:intavformat_network_init(void){#ifCONFIG_NETWORKintret;if((ret=ff_network_init())<0)returnret;if((ret=ff_tls_init())<0)returnret;#endifreturn0;}可以......
  • avdevice_register_all()解析备忘
    以下解析基于fmpeg-6.0。voidavdevice_register_all(void){avpriv_register_devices(outdev_list,indev_list);}从上面可以看出来,avdevice_register_all()通过avpriv_register_device注册所有输入输出列表上的设备。其中,outdev_list如下:staticconstFFOutputFormat*......
  • 请问为什么加载标签文字的时候,导致页面上出现卡顿?
    加载标签文字导致页面卡顿的问题可能与多种因素有关。这些因素可能包括页面结构、网络请求、浏览器性能、脚本执行等。以下是一些可能导致页面卡顿的原因以及解决方法:大量DOM元素:如果页面包含大量的DOM元素,加载和渲染这些元素可能导致页面卡顿。解决方法包括减少DOM元素数量,使用虚......
  • 技术分享| anyRTC音视频混流技术解析
    一,简介在视频通讯场景中,比如会议、直播等经常能看到图像合成的场景。图像合成是在指定的一块画面区域,在这个区域内,按画面的位置(坐标)布局,将区域中的每个视频画面的像素混合计算成一个像素(RGB)。比如以下是anyRTC的H323合成画面:二,图像合成如图所示,一幅图像或画面是由很多图层叠......