1、项目地址
2、建立一个实体类User
public class User {
private String userName;
private String email;
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;
}
}
3、创建一个文件,实现AbstractSingleBeanDefinitionParser接口,用来解析xsd文件中的定义和组件定义
public class UserBeanDefinitionParse extends AbstractSingleBeanDefinitionParser {
//Element对应的类
protected Class getBeanClass(Element element){
return User.class;
}
//从element中解析并提取出对应的元素
protected void doParse(Element element, BeanDefinitionBuilder bean) {
String userName = element.getAttribute("userName");
String email = element.getAttribute("email");
//将解析数据放入到BeanDefinitionBuilder中,待到完成所有的bean的解析后统一注册到beanFactory中
if(StringUtils.hasText(userName)){
bean.addPropertyValue("userName",userName);
}
if(StringUtils.hasText(email)){
bean.addPropertyValue("email",email);
}
}
}
4、创建一个Handler文件,扩展自NamespaceHandlerSupport,目的是将组件注册到Spring容器中
/**
* Created by Administrator on 2018/11/21.
* 目的是将组件注册到spring容器中
*/
public class MyNamespaceHandler extends NamespaceHandlerSupport {
@Override
public void init() {
registerBeanDefinitionParser("user",new UserBeanDefinitionParse());
}
}
5、在resources下创建一个user.xsd文件
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.lexueba.com/schema/user"
xmlns:tns="http://www.lexueba.com/schema/user" elementFormDefault="qualified">
<element name="user">
<complexType>
<attribute name="id" type="string"/>
<attribute name="userName" type="string"/>
<attribute name="email" type="string"/>
</complexType>
</element>
</schema>
6、在resources下创建一个META-INF文件(默认是没有的,只有在打成jar后,会默认自动生成),创建spring.handlers和spring.schemas文件
目录结构如下:
spring.handlers文件:http\://www.lexueba.com/schema/user=MyNamespaceHandler
spring.schemas文件:http\://www.lexueba.com/schema/user.xsd=user.xsd
7、在resources下创建test.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:myname="http://www.lexueba.com/schema/user"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.lexueba.com/schema/user http://www.lexueba.com/schema/user.xsd">
<myname:user id="testBean" userName="hahha" email="bbb"/>
</beans>
8、创建一个测试类
public class Test {
public static void main(String[] args) {
//BeanFactory bf =new XmlBeanFactory(new ClassPathResource("spring.xml"));
ApplicationContext ac = new ClassPathXmlApplicationContext("test.xml");
User user = (User) ac.getBean("testBean");
// System.out.println(user.getUserName());
System.out.println(user.getEmail()+"--"+user.getUserName());
}
}
运行结果如下:
bb--hahha