基于Spring可扩展Schema自定义配置(1)
2016-01-28 10:44
225 查看
本章主要介绍扩展前的准备工作。
这里我们要实现的功能如下,首先让Spring能够识别下面的配置。
这个配置的要实现的功能是,配置完后能够让Spring扫描我们自定义的
POM文件内容如下
关于Sechma的知识此处不再赘述,不会用的小伙伴们需要先去了解下。sechma位置在src/main/resources/META-INF/schema/stdws-1.0.xsd。
在Spring中加入命名空间,并使用标签,如下。这里要用到Spring的注解扫描功能。
在配置中定义了要扫描的包,不依赖与context的配置。
到此准备工作基本结束。
简述
本教程主要介绍如何扩展Spring的xml配置,让Spring能够识别我们自定义的Schema和Annotation。这里我们要实现的功能如下,首先让Spring能够识别下面的配置。
[code]<std:annotation-endpoint />
这个配置的要实现的功能是,配置完后能够让Spring扫描我们自定义的
@Endpoint注解。并且根据注解自动发布WebService服务。功能未完全实现,作为扩展Spring的教程,起一个抛砖引玉的作用。
创建项目
首先需要创建一个Java项目,这里使用Maven创建一个quickstart项目(普通Java项目)。POM文件内容如下
[code]<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
[code]<?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。
定义注解
[code]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的注解扫描功能。
[code]<?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 Boot集成Spring Data
- Java设计模式之单例模式
- Java多线程实现的2个方式
- java类库中的System.arraycopy()方法
- Java经典问题:传值与传引用?
- web工程中普通 java 类使用 properties 配置文件中属性
- Java编程思想(四) —— 复用类
- java设计模式之单例模式
- Spring技术内幕之Spring Data JPA-查询方式
- java异常及处理
- java查找目标字符串在原字符串中出现的次数
- java之邮件发送
- java.util类库中 Arrays类的6个实用方法
- 计算Java List中的重复项出现次数
- Spring+Hibernate+SpringMVC+MySql实现配置多个数据源!
- Spring+Hibernate+SpringMVC+MySql实现配置多个数据源!
- Spring+Hibernate+SpringMVC+MySql实现配置多个数据源!
- Spring AOP记录日志信息
- springmvc中使用response的out.print问题
- java中获取环境变量