什么是OXM?
OXM是Object-to-XML-Mapping的缩写,它是一个O/M-mapper,将java对象映射成XML数据,或者将XML数据映射成java对象。它类似 XML-Marshalling 或者是 XML-Serialization,并不是什么新技术。目前Spring framework 3.0引入了该特性。
现在让我们看看Spring的承诺:
听起来很不错,因为没有喜欢杂乱的接口,繁琐的配置,现在就让我们来检验一下Spring OXM的设计思想,本文着重讲述OXM特性的使用方法。
OXM in Spring 3.0
我们以一个Maven2实例工程来进行说明。首先,创建一个pom.xml文件:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.unitedcoders.examples</groupId>
<artifactId>SpringOxmExample</artifactId>
<packaging>jar</packaging>
<version>1.0.0-SNAPSHOT</version>
<name>SpringOxmExample</name>
<url>http://united-coders.com</url>
<build>
<finalName>SpringOxmExample</finalName>
<plugins>
<!-- Compiler Plugin to compile on Java 1.6 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerVersion>1.6</compilerVersion>
<fork>true</fork>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<!-- Properties -->
<properties>
<spring-version>3.0.0.RELEASE</spring-version>
</properties>
<!-- Dependencies -->
<dependencies>
<!-- Spring framework -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>${spring-version}</version>
</dependency>
<!-- Castor Xml -->
<dependency>
<groupId>org.codehaus.castor</groupId>
<artifactId>castor</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.9.1</version>
</dependency>
<!-- Logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<!-- Test dependencies -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.4</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
该实例中我用到了三个spring 模块,spring-core,spring-beans以及spring-oxm。另外,我使用Castor工程和Apache Xerces作为XML-Marshalling-dependencies.
接着,创建一个简单的javabean,将被序列换成XML字符串:
package com.unitedcoders.examples.spring.oxm.beans;
public class Person {
private String firstname;
private String lastname;
private boolean developer;
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public boolean isDeveloper() {
return developer;
}
public void setDeveloper(boolean developer) {
this.developer = developer;
}
}
然后,为O/X-Mapper创建一个接口:
package com.unitedcoders.examples.spring.oxm.mapper;
import java.io.IOException;
public interface OxMapper {
/**
* Serializes assigned Object into a file with the assigned name.
*
* @param object
* - Object that should be serialized
* @param filename
* - name of the XML-file
* @throws IOException
*/
public abstract void writeObjectToXml(Object object, String filename) throws IOException;
/**
* Deserializes an object from the assigned file.
*
* @param filename
* - name of the file that should be deserialized
* @return deserialized object
* @throws IOException
*/
public abstract Object readObjectFromXml(String filename) throws IOException;
}
我定义了两个方法,一个将对象转化成xml文件,一个将xml文件转换成对象。以下是该接口的实现类:
package com.unitedcoders.examples.spring.oxm.mapper;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.oxm.Marshaller;
import org.springframework.oxm.Unmarshaller;
import org.springframework.oxm.XmlMappingException;
public class OxMapperImpl implements OxMapper {
private static final Log LOG = LogFactory.getLog(OxMapperImpl.class);
private Marshaller marshaller;
private Unmarshaller unmarshaller;
public void writeObjectToXml(Object object, String filename) throws IOException {
FileOutputStream fos = null;
try {
fos = new FileOutputStream(filename);
marshaller.marshal(object, new StreamResult(fos));
} catch (XmlMappingException e) {
LOG.error("Xml-Serialization failed due to an XmlMappingException.", e);
} catch (IOException e) {
LOG.error("Xml-Serialization failed due to an IOException.", e);
} finally {
if (fos != null) {
fos.close();
}
}
}
public Object readObjectFromXml(String filename) throws IOException {
FileInputStream fis = null;
try {
fis = new FileInputStream(filename);
return unmarshaller.unmarshal(new StreamSource(fis));
} catch (IOException e) {
LOG.error("Xml-Deserialization failed due to an IOException.", e);
} finally {
if (fis != null) {
fis.close();
}
}
return null;
}
public Marshaller getMarshaller() {
return marshaller;
}
public void setMarshaller(Marshaller marshaller) {
this.marshaller = marshaller;
}
public Unmarshaller getUnmarshaller() {
return unmarshaller;
}
public void setUnmarshaller(Unmarshaller unmarshaller) {
this.unmarshaller = unmarshaller;
}
}
待续。。。
分享到:
相关推荐
标题中的"spring3.0,ssh"表明我们将讨论Spring框架的第三个主要版本(Spring 3.0)以及SSH(Struts、Spring、Hibernate)这三种技术的集成。SSH是Java Web开发中常用的三大开源框架,它们协同工作以构建高效、模块化...
Spring MVC是Spring Web框架的主要部分,Spring 3.0引入了更多用于构建RESTful服务的特性,如@RequestBody和@ResponseBody注解,以及ModelAndView类的增强。此外,对JSR-303/JSR-349(Bean Validation)的集成,使得...
Spring 3.0重要特性总结如下: ◆Spring表达式(SpEL):用于bean定义的核心表达式分析器 ◆对基于注释的组件的更多支持:允许通过元注释创建注释的“快捷方式” ◆标准化的依赖性注入注释:对Java中依赖性注入的...
Spring 3.0 是 Spring 框架的一个重要版本,引入了许多新特性,极大地提升了开发效率和灵活性。以下是对这些新特性的详细说明: 一、模块化与构建系统的改进 在 Spring 3.0 中,模块的组织变得更加精细化,不再像...
Spring 3.0版本是该框架的一个重要里程碑,引入了许多新特性和改进,为开发者提供了更强大的工具和更好的性能。在这个源码包中,我们可以深入理解Spring的工作原理,并学习如何优化我们的应用。 1. **依赖注入...
Spring 3.0 是一个广泛使用的Java应用程序框架,...这些jar包共同构成了Spring 3.0框架的基础,使得开发者能够构建高效、可扩展、易于维护的企业级应用。通过合理的配置和使用,可以大大提高开发效率并降低系统复杂性。
Spring框架是Java开发中最常用的轻量级开源框架之一,它以其强大的依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented Programming,简称AOP)能力而闻名。Spring 4.3.3是该框架的一个稳定...
Spring 3.0是该框架的一个重要版本,引入了许多新特性和改进,为开发者提供了更高效、更灵活的开发环境。在这个版本中,Spring的组件被分成了多个jar包,每个jar包都有特定的功能,以便于项目管理和优化性能。 首先...
随着Spring 3.0的更新,带来了许多新特性和增强功能。文档详细介绍了Java 5的支持,以及文档的改进,新文章和教程的发布,新的模块组织和构建系统。新的特性包括核心API更新、Spring表达式语言(Spring Expression ...
然而,Spring 3.0引入了新的【新特性】,包括声明式模型验证、全面的REST支持、嵌入式数据库支持、对象XML映射(OXM)以及下一代作业调度机制。 【Spring 3.0的作业调度新特性】中,最引人注目的是新的内置`Task...
3.0.5.RELEASE是Spring框架的一个特定版本,发布于2011年,它在之前的基础上进行了优化和增强,引入了许多新的特性和改进。 在资源包`spring-framework-3.0.5.RELEASE`中,主要包括以下组件和内容: 1. **核心容器...
Spring 3.0版本是其历史上的一个重要里程碑,引入了许多新特性和改进,以提升性能、简化开发流程并增强可扩展性。这个官方API文档包含了Spring 3.0的所有包及其类、接口和方法的详细信息,是开发者理解和使用Spring...
这个"Spring3.0常用开发jar包"包含了开发Spring应用所需的所有核心库,使开发者能够高效地构建基于Java的企业级应用程序。 1. **Spring Core**:Spring的核心模块,提供了依赖注入(Dependency Injection,DI)和...
Spring 3.0是该框架的一个重要版本,引入了许多新功能和改进,为开发者提供了更强大的工具和更灵活的配置选项。 首先,让我们深入了解一下Spring框架的核心组件: 1. **IoC容器**:Spring的IoC容器是其核心,负责...
Spring 3.0.5.RELEASE是在2011年发布的一个稳定版本,它引入了许多新特性和改进,旨在提升性能、可维护性和开发效率。 二、核心特性 1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一,通过DI,...
《Spring框架3.0.0.RC3深度解析》 Spring框架是Java开发中的核心组件,尤其在企业级应用开发中扮演着至关重要的角色。3.0.0.RC3版本是Spring发展的一个重要里程碑,引入了许多创新特性和优化,为开发者提供了更强大...
三、新特性与改进 在3.2.0.RELEASE版本中,Spring引入了一些重要改进: 1. **Servlet 3.0支持**:Spring 3.2开始支持Servlet 3.0规范,利用其特性如异步处理、注册监听器等,提高了Web应用的性能。 2. **AOP增强*...
二、Spring 3.0.0.RELEASE新特性 1. **注解驱动增强**:Spring 3.0引入了大量新的注解,如`@Autowired`、`@Qualifier`、`@Resource`等,使得代码更加简洁,降低了XML配置的复杂性。 2. **JSR-303验证集成**:支持...
通过"javadoc-api"这个压缩包,开发者可以快速查找并了解Spring 3.0框架中的每个类和接口的详细信息,包括它们的用途、如何使用以及与其他组件的交互方式。这有助于编写出高效、整洁且易于维护的代码,提高开发效率...