一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring oxm入門實例

Spring oxm入門實例

2021-03-12 14:33韌心 Java教程

這篇文章主要介紹了Spring oxm入門實例,具有一定借鑒價值,需要的朋友可以參考下

O/XMapper是什么?

Spring3.0的一個新特性是O/XMapper。O/X映射器這個概念并不新鮮,O代表Object,X代表XML。它的目的是在Java對象(幾乎總是一個plainoldJavaobject,或簡寫為POJO)和XML文檔之間來回轉換。

例如,您可能有一個帶有幾個屬性的簡單bean,且您的業務需要將那個Java對象轉換為一個XML文檔。Spring的O/XMapper能夠為您解決那個問題。如果反過來,您需要將一個XML文檔轉換為一個簡單Javabean,Spring的O/XMapper也能勝任。

有一點需要注意:SpringO/XMapper只是定義由流行的第三方框架實現的統一的界面。要利用Spring的O/X功能,您需要一個在Java對象和XML之間來回轉換的實用程序。Castor就是這樣一個流行的第三方工具,本文將使用這個工具。其他這樣的工具包括XMLBeans、JavaArchitectureforXMLBinding(JAXB)、JiBX和XStream。

編組和解組

進行O/X映射時,您經常會看到編組(marshalling)和解組(unmarshalling)這兩個術語。

編組指將Javabean轉換成XML文檔的過程,這意味著Javabean的所有字段和字段值都將作為XML元素或屬性填充到XML文件中。有時,編組也稱為序列化(serializing)。

如您所料,解組是與編組完全相反的過程,即將XML文檔轉換為Javabean,這意味著XML文檔的所有元素或屬性都作為Java字段填充到Javabean中。有時,解組也稱為反序列化(deserializing)。

使用Spring的O/XMapper的好處

使用Spring的O/XMapper的一個最直接的好處是可以通過利用Spring框架的其他特性簡化配置。Spring的bean庫支持將實例化的O/X編組器注入(即前面提到過的“依賴項注入”)使用那些編組器的對象。重申一遍,這將加快應用程序開發和部署。

遵循堅實的面向對象的設計實踐,SpringO/X框架只定義兩個接口:Marshaller和Unmarshaller,它們用于執行O/X功能,這是使用這個框架的另一個重大好處。這些接口的實現完全對獨立開發人員開放,開發人員可以輕松切換它們而無需修改代碼。例如,如果您一開始使用Castor進行O/X轉換,但后來發現它缺乏您需要的某個功能,這時您可以切換到XMLBeans而無需任何代碼更改。唯一需要做的就是更改Spring配置文件以使用新的O/X框架。

使用Spring的O/XMapper的另一個好處是統一的異常層次結構。Spring框架遵循使用它的數據訪問模塊建立的模式,方法是將原始異常對象包裝到Spring自身專為O/XMapper建立的運行時異常中。由于第三方提供商拋出的原始異常被包裝到Spring運行時異常中,您能夠查明出現異常的根本原因。您也不必費心修改代碼以捕獲異常,因為異常已包裝到一個運行時異常中。以下幾個運行時異常擴展了基礎異常XMLMappingException:GenericMarshallingFailureException、ValidationFailureException、MarshallingFailureException和UnmarshallingFailureException。

入門栗子

配置清單:

applicationContext.xmlSpring配置文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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">
  
  <bean id="oxmDemo" class="com.mdf.springoxm.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">
     <property name="mappingLocation" value="classpath:mapping.xml" />
  </bean>
</beans>

編組和解組時,套用的mapping格式,在進行解組的時候,必須使用mapping才能成功(這里存在疑問,不知道是否因為自己寫法問題,只能通過mapping進行格式編碼才能進行解組,否則報出無法找到rootelement的錯誤)。

mapping.xml文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<mapping>
    <class name="com.mdf.springoxm.Customer">
  
      <map-to xml="Customer"/>
  
      <field name="flag" type="boolean">
       <bind-xml name="flag" node="element"/>
      </field>
        
      <field name="name" type="string">
       <bind-xml name="name" node="element"/>
      </field>
  
      <field name="sex" type="string">
       <bind-xml name="sex" node="element"/>
      </field>
    </class>
</mapping>

自定義Bean文件

Customer.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.mdf.springoxm;
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;
    }
}

xmlDemo.java文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package com.mdf.springoxm;
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.springframework.oxm.Marshaller;
import org.springframework.oxm.Unmarshaller;
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;
    }
    public void convertFromObjectToXML(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();
            }
        }
    }
    public Object convertFromXMLToObject(String xmlfile) throws IOException {
        FileInputStream is = null;
        try {
            is = new FileInputStream(xmlfile);
            return getUnmarshaller().unmarshal(new StreamSource(is));
        }
        finally {
            if (is != null) {
                is.close();
            }
        }
    }
}

測試

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.mdf.springoxm.Customer;
import com.mdf.springoxm.oxmDemo;
import java.io.IOException;
public class Main {
    private static final String XML_FILE_NAME = "customer.xml";
    public static void main(String[] args) throws IOException {
        ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        oxmDemo converter = (oxmDemo) appContext.getBean("oxmDemo");
        Customer customer = new Customer();
        customer.setName("yiibai");
        customer.setFlag(true);
        customer.setSex("Haikou haidiandao");
        System.out.println("Convert Object to XML!");
        //from object to XML file
        converter.convertFromObjectToXML(customer, XML_FILE_NAME);
        System.out.println("Done \n");
        System.out.println("Convert XML back to Object!");
        //from XML to object
        Customer customer2 = (Customer)converter.convertFromXMLToObject(XML_FILE_NAME);
        System.out.println(customer2);
        System.out.println("Done");
    }
}

測試結果:

?
1
2
3
4
5
6
7
8
9
10
11
12
五月 11, 2016 2:27:52 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1221be2: startup date [Wed May 11 14:27:51 CST 2016]; root of context hierarchy
五月 11, 2016 2:27:52 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [applicationContext.xml]
五月 11, 2016 2:27:52 下午 org.springframework.oxm.castor.CastorMarshaller afterPropertiesSet
信息: Configured using [class path resource [mapping.xml]]
Convert Object to XML!
Done 
 
Convert XML back to Object!
com.mdf.springoxm.Customer@b419da
Done

總結

以上就是本文關于Spring oxm入門實例的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:http://blog.csdn.net/mdfxyy1234/article/details/51374245

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 男女一级特黄a大片 | 午夜无码国产理论在线 | 2019午夜福合集高清完整版 | 深夜在线网址 | 国产精品对白刺激久久久 | 欧美视频一 | 国产成人在线免费视频 | 国产成人青草视频 | 天天草b | 亚洲日韩精品欧美一区二区 | 美女gif趴跪式抽搐动态图 | 女人被爽到呻吟娇喘的视频动态图 | 王王的视频ivk | 无码国产成人777爽死在线观看 | 91aaa免费免费国产在线观看 | 精品国产欧美一区二区三区成人 | 九九精品热 | 挺进白嫩老师下面视频 | 日韩在线一区二区三区 | 国产精品女主播大秀在线 | 欧美日韩亚洲高清不卡一区二区三区 | blacked黑人hd2021| 免费观看大片毛片 | 色小孩导航 | 午夜在线观看免费完整直播网页 | 我们日本在线观看免费动漫下载 | 亚洲国产成人久久综合一 | 午夜爽喷水无码成人18禁三级 | ssni-497新任美脚女教师 | 麻生希在线 | 猫咪社区在线播放 | free性泰国女人hd | 国产精品久久久久这里只有精品 | 亚洲AV午夜精品麻豆AV | 国产亚洲综合精品一区二区三区 | 久久精品亚洲牛牛影视 | 欧美日韩视频在线一区二区 | 舔比小说 | 亚洲 色 欧美 爱 视频 日韩 | 日韩毛片大全免费高清 | 久久精品一区二区免费看 |