Spring oxm 入门

oxm : 是spring 3.0的一个新特性 o/xMapping 什么是o/xMapping?
            o/x mapping 入门:
                    功能:实践类与xml之间的相互转换。
                    编组:marshalling 将javabean转化为xml
                    解组:unmarshalling 将xml转化为JavaBean
                    好处:
                        1.因为spring的bean库支持实例化o/x编组的注入,所以使用xml编写的bean也可以注入spring中使用。这样做可以将程序和配置分类处理。结构更清晰。                           2.o/x使用面向接口的形式开发,所以单独的开发者不需要关注其实现细节,并且想要改变其实现方式,只需要修改o/x的实现配置即可。
                        3.异常类型层次结构化,spring把实现原厂的异常进行了自己的封装。并且是运行时异常!这样做可以更精准的定位异常。
                    代码demo:
                        maven pom文件信息:

<?xml version="1.0" encoding="UTF-8"?>
<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.spider</groupId>
    <artifactId>SpringOXM</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>

        <!--spring核心-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.2.5.RELEASE</version>
        </dependency>


        <!--oxm功能类jar-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-oxm</artifactId>
            <version>4.2.5.RELEASE</version>
        </dependency>

        <!--oxm功能类jar-->
        <dependency>
            <groupId>org.codehaus.castor</groupId>
            <artifactId>castor</artifactId>
            <version>1.3.2</version>
            <type>pom</type>
        </dependency>

        <!--oxm功能类jar-->
        <dependency>
            <groupId>org.codehaus.castor</groupId>
            <artifactId>castor-xml</artifactId>
            <version>1.3.2</version>
        </dependency>

        <!--spring上下文-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.2.5.RELEASE</version>
        </dependency>

    </dependencies>

</project>

                                            
                        配置文件设置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <!--将编组和解组功能导入到oxmDemo类中-->
    <bean id="oxmDemo" class="com.spider.OxmDemo">
        <property name="marshaller" ref="castorMarshaller" />
        <property name="unmarshaller" ref="castorMarshaller" />
    </bean>
    <!-- 引入castor包:castor-1.3.2-core.jar,castor-1.3.2-xml.jar -->
    <bean id="castorMarshaller" class="org.springframework.oxm.castor.CastorMarshaller">
        <!--包含映射关系的xml,如果不添加,解组时无法解析root元素-->
        <property name="mappingLocation" value="classpath:mapping.xml" />
    </bean>
</beans>

                  oxmDemo:编组解组调用类:

package com.spider;

import org.springframework.oxm.Marshaller;
import org.springframework.oxm.Unmarshaller;

import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;


public class OxmDemo {


    private Marshaller marshaller;//编组类
    private Unmarshaller unmarshaller;//解组类

    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;
    }

    /**
     * @param object 编码对象
     * @param filepath xml输出路径
     * @throws IOException io异常
     */
    public void converFromObjectToXML(Object object,String filepath) throws IOException {
            FileOutputStream os = null;
            try{
                os = new FileOutputStream(filepath);
                getMarshaller().marshal(object,new StreamResult(os));
            }finally {
               if(os!=null){
                   os.close();
               }
            }
    }

    /**
     * @param xmlfile xml文件位置
     * @return
     * @throws IOException
     */
    public Object converFromXMLToObject(String xmlfile) throws IOException{
        FileInputStream is = null;
        try{
            is = new FileInputStream(xmlfile);
            return getUnmarshaller().unmarshal(new StreamSource(is));
        }finally {
            if(is!=null){
                is.close();
            }
        }
    }
}

                     Customer:model类

package com.spider.model;

public class Customer {

    private String name;
    private String sex;
    private Boolean flag;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Boolean getFlag() {
        return flag;
    }

    public void setFlag(Boolean flag) {
        this.flag = flag;
    }

    @Override
    public String toString() {
        return "Customer{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", flag=" + flag +
                '}';
    }
}

                      测试类:

import com.spider.OxmDemo;
import com.spider.model.Customer;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

public class MyTest {
    private static final String XML_FILE_NAME = "E:\\spider-developer\\SpringOXM\\customer.xml";//文件输出位置
    public static void main(String[] args) throws IOException {
        ApplicationContext appContext = new ClassPathXmlApplicationContext("ApplicationContext.xml");
        OxmDemo oxmDemo = (OxmDemo) appContext.getBean("oxmDemo");
        Customer customer = new Customer();
        customer.setName("xiaowan");
        customer.setFlag(false);
        customer.setSex("man");
        System.out.println("Conver Object to XML");
        oxmDemo.converFromObjectToXML(customer,XML_FILE_NAME);
        System.out.println("Done /n");

        System.out.println("Conver XML to Object");
        Customer result = (Customer) oxmDemo.converFromXMLToObject(XML_FILE_NAME);
        System.out.println(result);
    }
}

                     console结果显示:

Conver XML to Object
Customer{name='xiaowan', sex='man', flag=false}

Process finished with exit code 0
 

                                            
                                
                        调用编组时调用Marshaller下的void marshal(Object var1, Result var2)方法,解组时调用Unmarshaller下的Object unmarshal(Source var1)方法。
                    源码:
                            

猜你喜欢

转载自blog.csdn.net/qq_37151646/article/details/82664846