`
岁月如歌
  • 浏览: 107215 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Spring 3.0 OXM - Spring 3.0 框架新特性

阅读更多

什么是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;
    }
    
}

     待续。。。

   

 

分享到:
评论
1 楼 习惯在马桶上思考 2012-07-06  
续在哪里啊

相关推荐

    spring3.0,ssh

    标题中的"spring3.0,ssh"表明我们将讨论Spring框架的第三个主要版本(Spring 3.0)以及SSH(Struts、Spring、Hibernate)这三种技术的集成。SSH是Java Web开发中常用的三大开源框架,它们协同工作以构建高效、模块化...

    spring3.0轻量级框架

    Spring MVC是Spring Web框架的主要部分,Spring 3.0引入了更多用于构建RESTful服务的特性,如@RequestBody和@ResponseBody注解,以及ModelAndView类的增强。此外,对JSR-303/JSR-349(Bean Validation)的集成,使得...

    spring3.0帮助文档(包含REST资料)

    Spring 3.0重要特性总结如下: ◆Spring表达式(SpEL):用于bean定义的核心表达式分析器 ◆对基于注释的组件的更多支持:允许通过元注释创建注释的“快捷方式” ◆标准化的依赖性注入注释:对Java中依赖性注入的...

    Spring3.0新特性

    Spring 3.0 是 Spring 框架的一个重要版本,引入了许多新特性,极大地提升了开发效率和灵活性。以下是对这些新特性的详细说明: 一、模块化与构建系统的改进 在 Spring 3.0 中,模块的组织变得更加精细化,不再像...

    spring-framework-3.0源码地址

    Spring 3.0版本是该框架的一个重要里程碑,引入了许多新特性和改进,为开发者提供了更强大的工具和更好的性能。在这个源码包中,我们可以深入理解Spring的工作原理,并学习如何优化我们的应用。 1. **依赖注入...

    spring3.0架包

    Spring 3.0 是一个广泛使用的Java应用程序框架,...这些jar包共同构成了Spring 3.0框架的基础,使得开发者能够构建高效、可扩展、易于维护的企业级应用。通过合理的配置和使用,可以大大提高开发效率并降低系统复杂性。

    spring最新版本4.3.3所有jar包

    Spring框架是Java开发中最常用的轻量级开源框架之一,它以其强大的依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented Programming,简称AOP)能力而闻名。Spring 4.3.3是该框架的一个稳定...

    Spring3.0中用到的所有jar包

    Spring 3.0是该框架的一个重要版本,引入了许多新特性和改进,为开发者提供了更高效、更灵活的开发环境。在这个版本中,Spring的组件被分成了多个jar包,每个jar包都有特定的功能,以便于项目管理和优化性能。 首先...

    Spring 3.0 API

    随着Spring 3.0的更新,带来了许多新特性和增强功能。文档详细介绍了Java 5的支持,以及文档的改进,新文章和教程的发布,新的模块组织和构建系统。新的特性包括核心API更新、Spring表达式语言(Spring Expression ...

    Spring3.0作业调度

    然而,Spring 3.0引入了新的【新特性】,包括声明式模型验证、全面的REST支持、嵌入式数据库支持、对象XML映射(OXM)以及下一代作业调度机制。 【Spring 3.0的作业调度新特性】中,最引人注目的是新的内置`Task...

    spring-framework-3.0.5.RELEASE 资源包,包含文档包和依赖包

    3.0.5.RELEASE是Spring框架的一个特定版本,发布于2011年,它在之前的基础上进行了优化和增强,引入了许多新的特性和改进。 在资源包`spring-framework-3.0.5.RELEASE`中,主要包括以下组件和内容: 1. **核心容器...

    Spring 3.0 官方API

    Spring 3.0版本是其历史上的一个重要里程碑,引入了许多新特性和改进,以提升性能、简化开发流程并增强可扩展性。这个官方API文档包含了Spring 3.0的所有包及其类、接口和方法的详细信息,是开发者理解和使用Spring...

    Spring3.0常用开发jar包

    这个"Spring3.0常用开发jar包"包含了开发Spring应用所需的所有核心库,使开发者能够高效地构建基于Java的企业级应用程序。 1. **Spring Core**:Spring的核心模块,提供了依赖注入(Dependency Injection,DI)和...

    spring3.0jar包及源码

    Spring 3.0是该框架的一个重要版本,引入了许多新功能和改进,为开发者提供了更强大的工具和更灵活的配置选项。 首先,让我们深入了解一下Spring框架的核心组件: 1. **IoC容器**:Spring的IoC容器是其核心,负责...

    spring-framework-3.0.5.RELEASE-with-docs.zip.zip

    Spring 3.0.5.RELEASE是在2011年发布的一个稳定版本,它引入了许多新特性和改进,旨在提升性能、可维护性和开发效率。 二、核心特性 1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一,通过DI,...

    spring-framework-3.0.0.RC3-with-docs.zip

    《Spring框架3.0.0.RC3深度解析》 Spring框架是Java开发中的核心组件,尤其在企业级应用开发中扮演着至关重要的角色。3.0.0.RC3版本是Spring发展的一个重要里程碑,引入了许多创新特性和优化,为开发者提供了更强大...

    spring-framework-3.2.0.RELEASE-docs.zip

    三、新特性与改进 在3.2.0.RELEASE版本中,Spring引入了一些重要改进: 1. **Servlet 3.0支持**:Spring 3.2开始支持Servlet 3.0规范,利用其特性如异步处理、注册监听器等,提高了Web应用的性能。 2. **AOP增强*...

    spring-framework-3.0.0.RELEASE.zip

    二、Spring 3.0.0.RELEASE新特性 1. **注解驱动增强**:Spring 3.0引入了大量新的注解,如`@Autowired`、`@Qualifier`、`@Resource`等,使得代码更加简洁,降低了XML配置的复杂性。 2. **JSR-303验证集成**:支持...

    Spring javadoc-api.rar

    通过"javadoc-api"这个压缩包,开发者可以快速查找并了解Spring 3.0框架中的每个类和接口的详细信息,包括它们的用途、如何使用以及与其他组件的交互方式。这有助于编写出高效、整洁且易于维护的代码,提高开发效率...

Global site tag (gtag.js) - Google Analytics