spring自定义标签
2020-11-11 本文已影响0人
GG_lyf
前言
大三了,大学时间这么快就要进入倒计时了,学校的课程也已经改革了,从ssh变成ssm了。老师还是那个老师,只是讲课的内容变了。半个学期,终于来了一次的ssm作业。老师让我们搞一个至少含有springMVC三个功能的页面。肯定有登录注册吧。我就想着用数据库?有点大材小用了,但是不用数据库,怎么存数据啊!难啊!这spring真是一大堆的包,看的心里都慌了。但哥们是那种说放弃就放弃的人吗?(只有别人放弃我的份啊),说干就干。
开搞
1.用idea创建个web项目(很简单的,自己建就完了)
项目目录
2.在resources下创建META-INF,只有在这个目录下编译时才能拿到里面的文件(哥们各种尝试,就这一种方法可以)
3.在写一个META-INF同级目录下创建applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:li="http://www.lyf.cn/schema/li"
xsi:schemaLocation="http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.lyf.cn/schema/li
http://www.lyf.cn/schema/li/user.xsd">
</beans>
4.写一个是实体类
public class User implements Serializable {
private String id;
private String name;
private String pass;
private String email;
private String addr;
//get,set和toString
}
//用于封装标签中的属性
5.在META-INF下创建一个spring.schemas,写上
http\://www.lyf.cn/schema/li/user.xsd=META-INF/user.xsd
//这个是指定那个标签内容是什么
6.在META-INF下创建一个user.xsd,写上
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns="http://www.lyf.cn/schema/li"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.lyf.cn/schema/li"
elementFormDefault="qualified">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
<!--这玩意就是定义标签内容的-->
<xsd:element name="user">
<xsd:complexType>
<xsd:attribute name="id" type="xsd:string"></xsd:attribute>
<xsd:attribute name="name" type="xsd:string"></xsd:attribute>
<xsd:attribute name="pass" type="xsd:string"></xsd:attribute>
<xsd:attribute name="email" type="xsd:string"></xsd:attribute>
<xsd:attribute name="addr" type="xsd:string"></xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:schema>
7..在META-INF下创建一个spring.handlers,写上
http\://www.lyf.cn/schema/li=org.lyf.Handlers.UserHandlers
//这个就是指定哪个解析器
8.创建个Handler
import org.springframework.beans.factory.xml.NamespaceHandlerSupport;
public class UserHandlers extends NamespaceHandlerSupport {
@Override
public void init() {
registerBeanDefinitionParser("user",new UserParserDefinitons());
}
}
//解析标签
9.创建ParserDefinitons
import org.lyf.bean.User;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
import org.w3c.dom.Element;
public class UserParserDefinitons extends AbstractSingleBeanDefinitionParser {
@Override
protected Class<?> getBeanClass(Element element) {
return User.class;
}
@Override
protected void doParse(Element element, BeanDefinitionBuilder builder) {
builder.addPropertyValue("id", element.getAttribute("id"));
builder.addPropertyValue("name", element.getAttribute("name"));
builder.addPropertyValue("pass", element.getAttribute("pass"));
builder.addPropertyValue("email", element.getAttribute("email"));
builder.addPropertyValue("addr", element.getAttribute("addr"));
}
}
//解析标签的内容
10.在applicationContext.xml中写标签和内容
<li:user id="one" name="llll" pass="32232" email="12534645485@qq.com" addr="aaaaaaaaaaaaaaa"/>
<li:user id="two" name="ddddd" pass="34343" email="333323423453@qq.com" addr="fffff"/>
11.编写测试类
import org.lyf.bean.User;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserService {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
User one = (User) context.getBean("one");
System.out.println(one);
}
}
12.结果
13.maven依赖(两个就行了)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.18.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.18.RELEASE</version>
</dependency>
注:没写页面,只能测试用,不过够学习了,github