Spring自定义配置Schema可扩展(一)
简述
本教程主要介绍如何扩展spring的xml配置,让spring能够识别我们自定义的schema和annotation。
这里我们要实现的功能如下,首先让spring能够识别下面的配置。
<std:annotation-endpoint />
这个配置的要实现的功能是,配置完后能够让spring扫描我们自定义的@endpoint注解。并且根据注解自动发布webservice服务。功能未完全实现,作为扩展spring的教程,起一个抛砖引玉的作用。
创建项目
首先需要创建一个java项目,这里使用maven创建一个quickstart项目(普通java项目)。
pom文件内容如下
<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/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <groupid>com.codestd</groupid> <artifactid>spring-cxf-annotation-support</artifactid> <version>1.0.0-snapshot</version> <name>${project.artifactid}</name> <description>使您的项目可以通过注解的方式发布webservice,基于spring+cxf封装,无api侵入。</description> <url>https://github.com/codestd/spring-cxf-annotation-support</url> <licenses> <license> <name>the apache license, version 2.0</name> <url>http://www.apache.org/licenses/license-2.0.txt</url> </license> </licenses> <developers> <developer> <name>jaune(wangchengwei)</name> <email>jaune162@126.com</email> <roles> <role>developer</role> </roles> <timezone>gmt+8</timezone> </developer> </developers> <scm> <connection> https://github.com/codestd/spring-cxf-annotation-support.git </connection> <developerconnection> https://github.com/codestd/spring-cxf-annotation-support.git </developerconnection> </scm> <properties> <junit.version>4.12</junit.version> <spring.version>4.2.4.release</spring.version> <cxf.version>3.1.3</cxf.version> </properties> <dependencies> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-context</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.apache.cxf</groupid> <artifactid>cxf-rt-frontend-jaxws</artifactid> <version>${cxf.version}</version> </dependency> <dependency> <groupid>org.apache.cxf</groupid> <artifactid>cxf-rt-transports-http-jetty</artifactid> <version>${cxf.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-test</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>log4j</groupid> <artifactid>log4j</artifactid> <version>1.2.14</version> <scope>test</scope> </dependency> <dependency> <groupid>org.slf4j</groupid> <artifactid>slf4j-log4j12</artifactid> <version>1.7.7</version> <scope>test</scope> </dependency> </dependencies> </project>
定义schema
<?xml version="1.0" encoding="utf-8" standalone="no"?> <xsd:schema xmlns="http://www.codestd.com/schema/std/ws" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:beans="http://www.springframework.org/schema/beans" targetnamespace="http://www.codestd.com/schema/std/ws" elementformdefault="qualified" attributeformdefault="unqualified"> <xsd:import namespace="http://www.springframework.org/schema/beans"/> <xsd:annotation> <xsd:documentation><![cdata[ namespace support for the annotation provided by cxf framework. ]]></xsd:documentation> </xsd:annotation> <xsd:element name="annotation-endpoint"> <xsd:complextype> <xsd:complexcontent> <xsd:extension base="beans:identifiedtype"> <xsd:attribute name="name" type="xsd:string" use="optional"> <xsd:annotation> <xsd:documentation><![cdata[ name of bean. insted of id ]]></xsd:documentation> </xsd:annotation> </xsd:attribute> <xsd:attribute name="package" type="xsd:string" use="optional"> <xsd:annotation> <xsd:documentation><![cdata[ pakeage to scan. ]]></xsd:documentation> </xsd:annotation> </xsd:attribute> </xsd:extension> </xsd:complexcontent> </xsd:complextype> </xsd:element> </xsd:schema>
关于sechma的知识此处不再赘述,不会用的小伙伴们需要先去了解下。sechma位置在src/main/resources/meta-inf/schema/stdws-1.0.xsd。
定义注解
package com.codestd.spring.cxf.annotation; import java.lang.annotation.documented; import java.lang.annotation.elementtype; import java.lang.annotation.retention; import java.lang.annotation.retentionpolicy; import java.lang.annotation.target; /** * 用于暴露webservice服务,通过在类上加入{@code @endpoint}注解实现服务暴露的目的。 * <p>扩展spring的bean扫描功能,在bean上加入此注解后会自动注册到spring容器中。 * @author jaune(wangchengwei) * @since 1.0.0 */ @target(elementtype.type) @retention(retentionpolicy.runtime) @documented public @interface endpoint { /** * 此endpoint在spring容器中的id * @return */ string id(); /** * 服务发布的地址,应神略服务器地址及端口号和项目路径 * @return */ string address(); }
在spring中的配置
打开“window”–“preferences”–“xml”–“xml catalog”。点击“add”,然后在location中选择我们上面创建的xsd。“key type”选择namespace name,key输入http://www.codestd.com/schema/std/ws/stdws-1.0.xsd。即sechma中定义的targetnamespace+文件名。
在spring中加入命名空间,并使用标签,如下。这里要用到spring的注解扫描功能。
<?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:std="http://www.codestd.com/schema/std/ws" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.codestd.com/schema/std/ws http://www.codestd.com/schema/std/ws/stdws-1.0.xsd"> <std:annotation-endpoint package="com.codestd.spring.cxf.ws"/> </beans>
在配置中定义了要扫描的包,不依赖与context的配置。
以上所述是小编给大家分享的spring自定义配置schema可扩展(一),希望对大家有所帮助。
上一篇: C# 通用文件上传类
推荐阅读
-
Spring自定义配置Schema可扩展(一)
-
toggle一个div显示或隐藏且可扩展成自定义下拉框
-
Spring MVC框架搭建扩展--多数据源配置(一)
-
基于spring JdbcTemplate的扩展,结合velocity模板实现sql语句的可配置可动态添加
-
基于spring JdbcTemplate的扩展,结合velocity模板实现sql语句的可配置可动态添加
-
SpringBoot + Spring Security 学习笔记(一)自定义基本使用及个性化登录配置
-
toggle一个div显示或隐藏且可扩展成自定义下拉框
-
toggle一个div显示或隐藏且可扩展成自定义下拉框_jquery
-
toggle一个div显示或隐藏且可扩展成自定义下拉框_jquery
-
SpringBoot + Spring Security 学习笔记(一)自定义基本使用及个性化登录配置