最后
spring-aop
${spring.version}
org.springframework
spring-context-support
${spring.version}
org.springframework
spring-test
${spring.version}
org.springframework
spring-beans
${spring.version}
javax
javaee-api
7.0
jstl
jstl
1.2
org.codehaus.jackson
jackson-mapper-asl
1.9.13
commons-fileupload
commons-fileupload
1.3.1
commons-io
commons-io
2.4
commons-codec
commons-codec
1.9
${project.artifactId}
src/main/java
**/*.properties
**/*.xml
false
src/main/resources
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
http://localhost:8080/manager/text
tomcat7
true
web.xml中加上spring mvc的配置:
SpringMVC
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-mvc.xml
1
true
SpringMVC
/
还有spring的配置文件,加上注解相关的配置:
<bean
class=“org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter”>
其余的配置可以自行设置,或者参考我上传到git上的源码;
创建配置属性的bean
本次实战的示例,以"电脑"为例,有两个属性:操作系统和内存大小,如下:
package com.bolingcavalry;
/**
-
Description:
-
@author willzhao
-
@email zq2599@gmail.com
-
@date 2017/7/1 22:15
*/
public class Computer {
/**
- 操作系统
*/
private String os;
/**
- 内存大小
*/
private int ram;
public String getOs() {
return os;
}
public void setOs(String os) {
this.os = os;
}
public int getRam() {
return ram;
}
public void setRam(int ram) {
this.ram = ram;
}
}
创建XSD文件
在工程的src\main\resources\META-INF\computer.xsd目录下创建computer.xsd文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?><xsd:schema
xmlns=“http://blog.csdn.net/boling_cavalry/schema/computer”
xmlns:xsd=“http://www.w3.org/2001/XMLSchema”
xmlns:beans=“http://www.springframework.org/schema/beans”
targetNamespace=“http://blog.csdn.net/boling_cavalry/schema/computer”
elementFormDefault=“qualified”
attributeFormDefault=“unqualified”>
<xsd:import namespace=“http://www.springframework.org/schema/beans”/>
<xsd:element name=“computer”>
xsd:complexType
xsd:complexContent
<xsd:extension base=“beans:identifiedType”>
<xsd:attribute name=“os” type=“xsd:string”/>
<xsd:attribute name=“ram” type=“xsd:int”/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
</xsd:schema>
注意xmlns和targetNamespace的内容,在外部使用时也会用到,还有就是xsd:element节点,里面对computer的两个属性做了约束;
创建自定义BeanDefinitionParser,制定配置信息的解析规则
接下来要写个BeanDefinitionParser,作用是拿到xml中的computer节点后,该如何从这个节点中取得有效的信息给spring环境,源码如下:
public class ComputerBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {
@Override
protected Class<?> getBeanClass(Element element) {
return Computer.class;
}
@Override
protected void doParse(Element element, BeanDefinitionBuilder builder) {
String os = element.getAttribute(“os”);
String ramStr = element.getAttribute(“ram”);
if(StringUtils.hasText(os)){
builder.addPropertyValue(“os”, os);
}
if(StringUtils.hasText(ramStr)){
builder.addPropertyValue(“ram”, Integer.valueOf(ramStr));
}
}
}
getBeanClass方法决定了解析节点后返回的bean的类型;doParse方法的入参中收到了computer节点,在方法中解析"os"和"ram"两个节点,然后调用builder.addPropertyValue可以把解析结果传入builder中;
创建自定义NamespaceHandler,规定配置信息的解析器
自定义的NamespaceHandler,可以告诉spring环境,遇到computer的配置信息后,应该用ComputerBeanDefinitionParser去解析,代码很少,如下:
public class ComputerNamespaceHandler extends NamespaceHandlerSupport {
public void init() {
registerBeanDefinitionParser(“computer”, new ComputerBeanDefinitionParser());
}
}
添加spring.handlers文件
在src\main\resources\META-INF\目录下,添加spring.handlers文件,内容只有一行,如下:
最后
Java架构学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。
还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
g.handlers文件,内容只有一行,如下:
最后
Java架构学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。
还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
[外链图片转存中…(img-6r5EV5Ze-1715601413037)]