写点什么

实战 spring 自定义属性 (schema)

  • 2021 年 11 月 11 日
  • 本文字数:3089 字

    阅读完需:约 10 分钟

  1. 在工程中配置一个这样的属性;

  2. 启动 web 工程,验证配置;


本次实战对应的源码可以从我的 git 上下载,地址是:git@github.com:zq2599/blog_demos.git,里面有多个工程,本次用到的是 springschemademo,如下图红框所示:



开始实战吧:


创建 web 工程




创建一个 maven 工程,pom.xml 的内容如下,主要是把 spring 相关的依赖引入:


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"


xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">


<modelVersion>4.0.0</modelVersion>


<groupId>com.bolingcavalry</groupId>


<artifactId>springschemademo</artifactId>


<packaging>war</packaging>


<version>0.0.1-SNAPSHOT</version>


<name>app Maven Webapp</name>


<url>http://maven.apache.org</url>


<properties>


<spring.version>4.0.2.RELEASE</spring.version>


</properties>


<dependencies>


<dependency>


<groupId>junit</groupId>


<artifactId>junit</artifactId>


<version>4.11</version>


<scope>test</scope>


</dependency>


<dependency>


<groupId>org.springframework</groupId>


<artifactId>spring-core</artifactId>


<version>${spring.version}</version>


</dependency>


<dependency>


<groupId>org.springframework</groupId>


<artifactId>spring-web</artifactId>


<version>${spring.version}</version>


</dependency>


<dependency>


<groupId>org.springframework</groupId>


<artifactId>spring-oxm</artifactId>


<version>${spring.version}</version>


</dependency>


<dependency>


<groupId>org.springframework</groupId>


<artifactId>spring-tx</artifactId>


<version>${spring.version}</version>


</dependency>


<dependency>


<groupId>org.springframework</groupId>


<artifactId>spring-jdbc</artifactId>


<version>${spring.version}</version>


</dependency>


<dependency>


<groupId>org.springframework</groupId>


<artifactId>spring-webmvc</artifactId>


<version>${spring.version}</version>


</dependency>


<dependency>


<groupId>org.springframework</groupId>


<artifactId>spring-aop</artifactId>


<version>${spring.version}</version>


</dependency>


<dependency>


<groupId>org.springframework</groupId>


<artifactId>spring-context-support</artifactId>


<version>${spring.version}</version>


</dependency>


<dependency>


<groupId>org.springframework</groupId>


<artifactId>spring-test</artifactId>


<version>${spring.version}</version>


</dependency>


<dependency>


<groupId>org.springframework</groupId>


<artifactId>spring-beans</artifactId>


<version>${spring.version}</version>


</dependency>


<dep


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


endency>


<groupId>javax</groupId>


<artifactId>javaee-api</artifactId>


<version>7.0</version>


</dependency>


<dependency>


<groupId>jstl</groupId>


<artifactId>jstl</artifactId>


<version>1.2</version>


</dependency>


<dependency>


<groupId>org.codehaus.jackson</groupId>


<artifactId>jackson-mapper-asl</artifactId>


<version>1.9.13</version>


</dependency>


<dependency>


<groupId>commons-fileupload</groupId>


<artifactId>commons-fileupload</artifactId>


<version>1.3.1</version>


</dependency>


<dependency>


<groupId>commons-io</groupId>


<artifactId>commons-io</artifactId>


<version>2.4</version>


</dependency>


<dependency>


<groupId>commons-codec</groupId>


<artifactId>commons-codec</artifactId>


<version>1.9</version>


</dependency>


</dependencies>


<build>


<finalName>${project.artifactId}</finalName>


<resources>


<resource>


<directory>src/main/java</directory>


<includes>


<include>**/*.properties</include>


<include>**/*.xml</include>


</includes>


<filtering>false</filtering>


</resource>


<resource>


<directory>src/main/resources</directory>


</resource>


</resources>


<plugins>


<plugin>


<groupId>org.apache.tomcat.maven</groupId>


<artifactId>tomcat7-maven-plugin</artifactId>


<version>2.2</version>


<configuration>


<url>http://localhost:8080/manager/text</url>


<server>tomcat7</server>


<path>/${project.artifactId}</path>


<update>true</update>


</configuration>


</plugin>


</plugins>


</build>


</project>


web.xml 中加上 spring mvc 的配置:


<servlet>


<servlet-name>SpringMVC</servlet-name>


<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>


<init-param>


<param-name>contextConfigLocation</param-name>


<param-value>classpath:spring-mvc.xml</param-value>


</init-param>


<load-on-startup>1</load-on-startup>


<async-supported>true</async-supported>


</servlet>


<servlet-mapping>


<servlet-name>SpringMVC</servlet-name>


<url-pattern>/</url-pattern>


</servlet-mapping>


还有 spring 的配置文件,加上注解相关的配置:


<bean


class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">


<property name="messageConverters">


<list>


<ref bean="mappingJacksonHttpMessageConverter" />


</list>


</property>


</bean>


其余的配置可以自行设置,或者参考我上传到 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

评论

发布
暂无评论
实战spring自定义属性(schema)