欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

spring使用OXM進行對象XML映射解析

 更新時間:2017年12月28日 10:02:45   作者:末日流云18  
這篇文章主要介紹了spring使用OXM進行對象XML映射解析,具有一定借鑒價值,需要的朋友可以參考下

1、認識XML解析技術(shù)

1.1、XML相關(guān)概念

(1)DTD:XML語法規(guī)則,是XML文件的驗證機制,可以通過比較XML文檔和DTD文件看文檔是否符合規(guī)范,元素和標簽是否使用正確。

(2)XML是SOA的基礎(chǔ)。

1.2、XML處理技術(shù)

(1)為了使用XML,我們需要通過XML處理器或XMLAPI來訪問數(shù)據(jù),目前JAXP提供了2種處理XML的方法:DOM和SAX。

①DOM:DOM通過編程方式對XML文檔中數(shù)據(jù)及結(jié)構(gòu)進行訪問,基于XML文檔在內(nèi)存中的樹狀結(jié)構(gòu)。其缺點是將整個XML文檔裝入內(nèi)存需要很大開銷。

②SAX:基于事件驅(qū)動,用到一段解析一段,解決了DOM占用內(nèi)存大的問題,但其缺點是無法隨機訪問文檔。

(2)為了解決DOM和SAX的問題,一種基于流的StreamAPIforXML(簡稱StAX)出現(xiàn)了,目前已加入到JDK6的JAXP1.4里面,StAX也是基于事件驅(qū)動。

(3)DOM、SAX和StAX都是從文檔結(jié)構(gòu)出發(fā)處理XML的,但很多應用程序僅僅關(guān)注文檔數(shù)據(jù)本身,所以XML數(shù)據(jù)綁定技術(shù)應運而生。

數(shù)據(jù)綁定:是指將數(shù)據(jù)從存儲媒介(XML文檔和數(shù)據(jù)庫中)抽取出來,并通過程序表示這些數(shù)據(jù)的過程,即把數(shù)據(jù)綁定到虛擬機能夠理解并且可以操作的某種內(nèi)存結(jié)構(gòu)中。

XML綁定框架:Castor,JAXB,JiBX,Quick,Zeus等。

2、XML處理利器:XStream

2.1、XStream概述

(1)XStream是一套簡潔易用的開源框架,用于將Java對象序列化為XML,或者將XML反序列化為Java對象。XStream主要特點:

(2)XStream架構(gòu)組成:

Converters(轉(zhuǎn)換器):當XStream遇到需要轉(zhuǎn)換的對象時,它會委派給合適的轉(zhuǎn)換器實現(xiàn)。

IO(輸入/輸出):XStream是通過HierarchicalStreamWriter和HierarchicalStreamReader從底層XML數(shù)據(jù)中抽象而來,分別用于序列化和反序列化操作。

Context(上下文):XStream序列化反序列化對象時會創(chuàng)建2個類MarshallingContext和UnmarshallingContext,由塔門來處理數(shù)據(jù)并委派給合適的轉(zhuǎn)換器。

Facade(統(tǒng)一入口):將上面的3點集成在一起,以統(tǒng)一的接口開放給用戶使用。

2.2、快速入門

(1)創(chuàng)建一個XStream,并指定XML解析器

XStreamxstream=newXStream(newDomDriver());

如果不指定解析器,XStream會默認采用XPP(XMLPullParser)解析器,XPP是一種高速解析器。

(2)示例如下:

2.3、使用XStream別名

(1)在上面的示例中,java對象的全類名對應XML文件的根元素,屬性名對應XML文件的節(jié)點元素,但在實際情況中,java對象和XML對象可能都已經(jīng)定義好了名字,這時就需要使用別名映射。

XStream有3種別名配置情況:

類別名:用alias(Stringname,Classtype)。

類成員別名:用aliasField(Stringalias,ClassdefinedIn,StringfieldName)。

類成員作為屬性別名:用aliasAttribute(ClassdefinedIn,StringattributeName,Stringalias),單獨命名沒有意義,還要通過useAttributeFor(ClassdefinedIn,StringfieldName)應用到某個類上。

(2)通過別名修改2.2中示例:

2.4、XStream轉(zhuǎn)換器

在開發(fā)過程中,有時候需要轉(zhuǎn)換一些自定義的類型,只要實現(xiàn)Converter接口,并調(diào)用XStream的registerConverter()方法注冊轉(zhuǎn)換器就可以。

2.5、XStream注解

(1)XStream常用注解如下:

(2)使用

XStreamxstream=newXStream(newDomDriver());

加載對象有2種方式:

①方式一:

xstream.processAnnotations(AAA.class);

xstream.processAnnotations(BBB.class);

②方式二:

xstream.autodetectAnnotations(true);//自動加載注解bean,而且還緩存了標注的對象

2.6、流化對象

(1)XStream為ObjectInputStream和ObjectOutputStream提供了替代實現(xiàn),允許以對象流的方式進行XML序列化或反序列化操作。前面是基于DOM的XML解析器讀取的XML,這里我們顯然應該使用流的方式進行解析。

示例如下:

(2)使用PrettyWriter和CompactWriter的區(qū)別就在于PrettyWriter會格式化生成的XML,而CompactWriter會壓縮生成的XML。

2.7、持久化API

(1)XStream提供了一套簡單的方式,可以將集合中的對象持久化到文件中,如:XmlArrayList、XmlSet、XmlMap等。

(2)在創(chuàng)建集合之前,還需要指定一個持久化策略PersistenceStrategy。

2.8、處理JSON

(1)XML在WebService中有不可動搖的地位,但是在大多數(shù)web應用中,還是多采用輕量級的JSON作為數(shù)據(jù)交換格式。

(2)XStream提供了JettisonMappedXmlDriver和JsonHierarchicalStreamDriver來完成java對象和json的轉(zhuǎn)換工作。

示例如下:

(3)JettisonMappedXmlDriver和JsonHierarchicalStreamDriver的區(qū)別:

①JettisonMappedXmlDriver生成的是壓縮的JSON,而JsonHierarchicalStreamDriver生成的是格式化的JSON。

②要想將JSON轉(zhuǎn)換為對象,只能使用JettisonMappedXmlDriver。

3、其他常見的O/XMapping開源項目

JAXB、XMLBeans、Cstor、JiBX的比較:

4、與SpringOXM整合

4.1、SpringOXM概述

(1)SpringOXM對主流O/XMapping框架做了一個統(tǒng)一的抽象和封裝,Marshaller和Unmarshaller是SpringOXM兩個核心接口。Marshaller用于將對象轉(zhuǎn)成XML,Unmarshaller用于將XML轉(zhuǎn)成對象。

(2)各O/XMapping組件包裝器如下:

4.2、在Spring中進行配置

(1)XStreamMarshaller配置實例:

5、小結(jié)

(1)java應用程序的XML數(shù)據(jù)綁定可以歸納為2種方式:

根據(jù)XML文檔生成Java語言代碼(如JAXB、XMLBeans、Castor)。

使用某種形式的映射綁定方法,也就是設(shè)定Java類如何與XML進行關(guān)聯(lián)(如XStream、Castor、JiBX)。

(2)2種方式比較:

使用由Schema或DTD定義的穩(wěn)定文檔結(jié)構(gòu),并且該結(jié)構(gòu)適合應用程序的需要,則代碼生成方法可能是最佳選擇。

如果使用現(xiàn)有的Java類,或者希望使用類的結(jié)構(gòu),該結(jié)構(gòu)反映應用程序?qū)?shù)據(jù)的用法,而不是XML結(jié)構(gòu),則映射方法是最佳選擇。

總結(jié)

以上就是本文關(guān)于spring使用OXM進行對象XML映射解析的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • 關(guān)于post請求內(nèi)容無法重復獲取的解決方法

    關(guān)于post請求內(nèi)容無法重復獲取的解決方法

    這篇文章主要介紹了關(guān)于post請求內(nèi)容無法重復獲取的解決方法,文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-03-03
  • Spring中事務傳播行為的介紹

    Spring中事務傳播行為的介紹

    今天小編就為大家分享一篇關(guān)于Spring中事務傳播行為的介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java Collections.EMPTY_LIST與Collections.emptyList()的區(qū)別

    Java Collections.EMPTY_LIST與Collections.emptyList()的區(qū)別

    這篇文章主要介紹了Java Collections.EMPTY_LIST與Collections.emptyList()的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java之使用多線程代替for循環(huán)(解決主線程提前結(jié)束問題)

    java之使用多線程代替for循環(huán)(解決主線程提前結(jié)束問題)

    這篇文章主要介紹了java之使用多線程代替for循環(huán)(解決主線程提前結(jié)束問題),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java請求調(diào)用參數(shù)格式為form-data類型的接口代碼示例

    Java請求調(diào)用參數(shù)格式為form-data類型的接口代碼示例

    這篇文章主要給大家介紹了關(guān)于Java請求調(diào)用參數(shù)格式為form-data類型的接口的相關(guān)資料,文中給出了詳細的代碼示例,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • 舉例講解Java的JSON類庫GSON的基本用法

    舉例講解Java的JSON類庫GSON的基本用法

    GSON是谷歌在GitHub上開源的Java的JSON格式轉(zhuǎn)換類庫,能夠?qū)崿F(xiàn)Java對象向JSON的序列和反序列,這里我們就來舉例講解Java的JSON類庫GSON的基本用法:
    2016-06-06
  • 最新評論