首页 > 编程语言 >Spring源码-自定义标签

Spring源码-自定义标签

时间:2022-08-28 13:12:42浏览次数:45  
标签:name 自定义 Spring age public 源码 user id append

一、新建实体类

    public class User implements Serializable {
private String id;

private String name;

private Integer age;

public String getId() {
	return id;
}

public void setId(String id) {
	this.id = id;
}

public String getName() {
	return name;
}

public void setName(String name) {
	this.name = name;
}

public Integer getAge() {
	return age;
}

public void setAge(Integer age) {
	this.age = age;
}

@Override
public String toString() {
	final StringBuffer sb = new StringBuffer("User{");
	sb.append("id='").append(id).append('\'');
	sb.append(", name='").append(name).append('\'');
	sb.append(", age=").append(age);
	sb.append('}');
	return sb.toString();
}
  }

二、新建xsd文件

    <?xml version="1.0" encoding="UTF-8"?>
    <schema xmlns="http://www.w3.org/2001/XMLSchema"
    		targetNamespace="http://www.myself.com/schema/user"
    		xmlns:tns="http://www.myself.com/schema/user"
    		elementFormDefault="qualified">
    	<element name="user">
    		<complexType>
    			<attribute name ="id" type = "string"/>
    			<attribute name ="name" type = "string"/>
    			<attribute name ="age" type = "integer"/>
    		</complexType>
    	</element>
    </schema>

三、新建NamespaceHandler和BeanDefinitionParser

    public class UserBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {
  @Override
  protected Class<?> getBeanClass(Element element) {
		return User.class;
	  }

@Override
protected void doParse(Element element, BeanDefinitionBuilder builder) {
	if (element.hasAttribute("id")) {
		builder.addPropertyValue("id", element.getAttribute("id"));
	}
	if (element.hasAttribute("name")) {
		builder.addPropertyValue("name", element.getAttribute("name"));
	}
	if (element.hasAttribute("age")) {
		builder.addPropertyValue("age", element.getAttribute("age"));
	}
    }
    }

    public class UserNamespaceHandler extends NamespaceHandlerSupport {
    @Override
	  public void init() {
  		registerBeanDefinitionParser("user", new UserBeanDefinitionParser ());
  	  }
    }

四、在resources目录下建立META-INF目录并新建spring.handlers和spring.schemas

spring.handlers

    http\://www.myself.com/schema/user=selftag.UserNamespaceHandler

spring.schemas

    http\://www.myself.com/schema/user.xsd=META-INF/user.xsd

五、使用

在app-test.xml文件的beans标签中加入

    xmlns:aaa="http://www.myself.com/schema/user"
    http://www.myself.com/schema/user http://www.myself.com/schema/user.xsd

bean定义

    <aaa:user name="李四" id="123" age="45"></aaa:user>

运行

    ApplicationContext applicationContext = new MyClassPathApplicationContext("classpath:app-${user}.xml");
    User user = applicationContext.getBean(User.class);
System.out.println(user);

标签:name,自定义,Spring,age,public,源码,user,id,append
From: https://www.cnblogs.com/shigongp/p/16632604.html

相关文章

  • spring源码具体细节 super setConfigLocations
      1首先先调用super父类构造方法 classPathXmlApplicaitonContext 初始化成员属性  依然掉父类构造方法 调用父类 资源处理器 当前系统需要运行所......
  • Spring源码01:环境搭建
    写在开始:这个系列会陆续更新我学习Spring源码的一些笔记与自己的理解,由于本人水平有限,难免对有些知识理解不到位,亦或者手误导致文中有不正确的地方,欢迎各位指正与探讨。......
  • Spring(二)-生命周期 + 自动装配(xml) +自动装配(注解)
    1、生命周期**Spring容器的bean**的生命周期;1.1默认生命周期1.1.1生命周期调用构造方法,创建实例对象;set方法,给实例对象赋值;init初始化方法初始化对象;(手......
  • 通过自定义指令对button进行权限的校验
    通过自定义指令对button进行权限的校验场景:左侧菜单栏通过调接口获取,每一个菜单下的还有该菜单下的button的权限操作,在mentType为2时,该children就是button权限列表1.先获......
  • vue自定义实现虚拟化列表
     1使用<ViualList:size="40":remain="8":dataList="dataList"></ViualList>size:每个列表的高度Heightremain:当前屏幕展示数据个数dataList:当前数据2自定义......
  • Spring中的SPI机制
    前言在面向对象编程领域中,六大原则之一的依赖倒置原则提到的原则规定:高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口;抽象接口不应该依赖于具体实现,而......
  • 理解Spring Security和实现动态授权
    一、SpringSecurity架构SpringSecurity是基于SpringAOP和Servlet过滤器的安全框架,提供全面的安全性解决方案。SpringSecurity核心功能包括用户认证(Authenticati......
  • Cannot resolve org.springframework.cloud:spring-cloud-starter-netflix-eureka-ser
    Cannotresolveorg.springframework.cloud:spring-cloud-starter-netflix-eureka-server:unknown前言:启动eureka项目,发现右侧maven中的项目dependencies报红,reimport也......
  • Spring @Repository 注解
    Spring的项目严重依赖注解。@Repository 注解在Spring2.0之前的版本中,@Repository注解可以标记在任何的类上,用来表明该类是用来执行与数据库相关的操作(即dao对象),并支......
  • Spring 最常用的几个注解
    大家都知道Spring严重依赖注解。实际开发的时候,我们用得最多的可能就是下面几个注解了。注解用途@Component最最普通的注解,表示这个类可以被注入到Spring容......