日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Spring中的Object/XML映射詳解

Spring作為Java應(yīng)用程序框架,已在Java開(kāi)發(fā)社區(qū)中得到廣泛使用,SpringSource近日發(fā)布了最新版本Spring 3.0.1版本。文章主要針對(duì)Spring中的Object/XML映射,分析使用Object/XML映射的特性與優(yōu)勢(shì)。

專業(yè)領(lǐng)域包括網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站商城網(wǎng)站制作、微信營(yíng)銷、系統(tǒng)平臺(tái)開(kāi)發(fā), 與其他網(wǎng)站設(shè)計(jì)及系統(tǒng)開(kāi)發(fā)公司不同,創(chuàng)新互聯(lián)建站的整合解決方案結(jié)合了幫做網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營(yíng)銷的理念,并將策略和執(zhí)行緊密結(jié)合,為客戶提供全網(wǎng)互聯(lián)網(wǎng)整合方案。

Spring以其流行的科技詞匯而著名,比如“dependencyinjection(依賴項(xiàng)注入)”、“inversionofcontrol(控制反轉(zhuǎn))”和“aspect-orientedprogramming(面向方面編程)”等。它還支持Model-View-Controller(MVC)模式,很好地兼容用于數(shù)據(jù)訪問(wèn)的各種數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序。

另外,它支持事務(wù)處理、單元測(cè)試、批處理和安全性。鑒于Spring的良好聲譽(yù)和悠久歷史,它通常是應(yīng)用程序快速開(kāi)發(fā)的選擇框架。但是,最大的好處也許是:Spring是免費(fèi)的。

Object/XML映射是什么?

Spring 3.0的一個(gè)新特性是O/XMapper。O/X映射器這個(gè)概念并不新鮮,O代表Object,X代表XML。它的目的是在Java對(duì)象(幾乎總是一個(gè)plainoldJavaobject,或簡(jiǎn)寫為POJO)和XML文檔之間來(lái)回轉(zhuǎn)換。

例如,您可能有一個(gè)帶有幾個(gè)屬性的簡(jiǎn)單bean,且您的業(yè)務(wù)需要將那個(gè)Java對(duì)象轉(zhuǎn)換為一個(gè)XML文檔。Spring的O/XMapper能夠?yàn)槟鉀Q那個(gè)問(wèn)題。如果反過(guò)來(lái),您需要將一個(gè)XML文檔轉(zhuǎn)換為一個(gè)簡(jiǎn)單Javabean,Spring的O/XMapper也能勝任,有一點(diǎn)需要注意:SpringO/XMapper只是定義由流行的第三方框架實(shí)現(xiàn)的統(tǒng)一的界面。要利用Spring的O/X功能,您需要一個(gè)在Java對(duì)象和XML之間來(lái)回轉(zhuǎn)換的實(shí)用程序。Castor就是這樣一個(gè)流行的第三方工具,本文將使用這個(gè)工具。其他這樣的工具包括XMLBeans、JavaArchitectureforXMLBinding(JAXB)、JiBX和XStream。

編組和解組

進(jìn)行O/X映射時(shí),您經(jīng)常會(huì)看到編組(marshalling)和解組(unmarshalling)這兩個(gè)術(shù)語(yǔ)。編組指將Javabean轉(zhuǎn)換成XML文檔的過(guò)程,這意味著Javabean的所有字段和字段值都將作為XML元素或?qū)傩蕴畛涞絏ML文件中。有時(shí),編組也稱為序列化(serializing)。

如您所料,解組是與編組完全相反的過(guò)程,即將XML文檔轉(zhuǎn)換為Javabean,這意味著XML文檔的所有元素或?qū)傩远甲鳛镴ava字段填充到Javabean中。有時(shí),解組也稱為反序列化(deserializing)。

使用Spring的O/XMapper的好處

使用Spring的O/XMapper的一個(gè)最直接的好處是可以通過(guò)利用Spring框架的其他特性簡(jiǎn)化配置。Spring的bean庫(kù)支持將實(shí)例化的O/X編組器注入(即前面提到過(guò)的“依賴項(xiàng)注入”)使用那些編組器的對(duì)象。重申一遍,這將加快應(yīng)用程序開(kāi)發(fā)和部署。

遵循堅(jiān)實(shí)的面向?qū)ο蟮脑O(shè)計(jì)實(shí)踐,Spring Object/XML框架只定義兩個(gè)接口:Marshaller和Unmarshaller,它們用于執(zhí)行O/X功能,這是使用這個(gè)框架的另一個(gè)重大好處。這些接口的實(shí)現(xiàn)完全對(duì)獨(dú)立開(kāi)發(fā)人員開(kāi)放,開(kāi)發(fā)人員可以輕松切換它們而無(wú)需修改代碼。例如,如果您一開(kāi)始使用Castor進(jìn)行O/X轉(zhuǎn)換,但后來(lái)發(fā)現(xiàn)它缺乏您需要的某個(gè)功能,這時(shí)您可以切換到XMLBeans而無(wú)需任何代碼更改。唯一需要做的就是更改Spring配置文件以使用新的Object/XML框架。

使用Spring的Object/XML映射的另一個(gè)好處是統(tǒng)一的異常層次結(jié)構(gòu)。Spring框架遵循使用它的數(shù)據(jù)訪問(wèn)模塊建立的模式,方法是將原始異常對(duì)象包裝到Spring自身專為O/XMapper建立的運(yùn)行時(shí)異常中。由于第三方提供商拋出的原始異常被包裝到Spring運(yùn)行時(shí)異常中,您能夠查明出現(xiàn)異常的根本原因。您也不必費(fèi)心修改代碼以捕獲異常,因?yàn)楫惓R寻b到一個(gè)運(yùn)行時(shí)異常中。以下幾個(gè)運(yùn)行時(shí)異常擴(kuò)展了基礎(chǔ)異常XMLMappingException:GenericMarshallingFailureException、ValidationFailureException、MarshallingFailureException和UnmarshallingFailureException。 #p#

一個(gè)簡(jiǎn)單的演示

現(xiàn)在您已經(jīng)了解了Spring的O/XMapper的背景和基礎(chǔ)知識(shí),可以檢驗(yàn)它的使用方法了。在本文中,您首先創(chuàng)建一個(gè)簡(jiǎn)單的Spring應(yīng)用程序,該程序獨(dú)立于任何JavaEnterprise依賴項(xiàng)。然后,您創(chuàng)建一個(gè)簡(jiǎn)單的Java類,它訪問(wèn)Spring的配置文件來(lái)實(shí)例化該類并注入O/X依賴項(xiàng)。參見(jiàn)下載部分獲取所有源代碼文件(包括配置文件)的鏈接。

編碼

首先應(yīng)該注意Spring配置文件。清單1是應(yīng)用程序用于執(zhí)行編組和解組操作的配置文件。注意,這個(gè)文件必須在運(yùn)行時(shí)位于類路徑中,清單1.配置文件:

 
 
 
  1. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://www.springframework.org/schema/beans
  3. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

如您所見(jiàn),這個(gè)配置文件只定義了兩個(gè)bean,這是為了簡(jiǎn)便起見(jiàn)。第一個(gè)bean是用于執(zhí)行演示的類:com.xyz.OXMExample。與該類關(guān)聯(lián)的兩個(gè)屬性使用依賴項(xiàng)注入,它們都使用castorMarshallerbean的一個(gè)實(shí)例注入。這是在Spring框架中定義bean的標(biāo)準(zhǔn)方法,經(jīng)驗(yàn)豐富的Spring開(kāi)發(fā)人員很快就會(huì)意識(shí)到這一點(diǎn)。

另一個(gè)bean是castorMarshallerbean本身,它是org.springframework.oxm.castor.CastorMarshaller的一個(gè)實(shí)例,org.springframework.oxm.castor.CastorMarshaller主要用于包裝Castor框架。如前所述,使用Spring的Object/XML功能需要使用一個(gè)第三方O/X框架。在本例中,這個(gè)第三方產(chǎn)品是Castor。還要注意,有一個(gè)屬性使用castorMarshaller定義,那是用于在Javabean和XML輸出之間來(lái)回映射的映射文件。這個(gè)文件稱為mapping.xml,它必須在運(yùn)行時(shí)位于類路徑中。我將稍后解釋mapping.xml文件的內(nèi)容。清單2實(shí)際執(zhí)行O/X映射器的代碼的部分清單。它是一個(gè)簡(jiǎn)單的Java類,清單2.OXMExample類:

 
 
 
  1. publicclassOXMExample{
  2. privatestaticfinalStringFILE_NAME="simplebean.xml";
  3. privateSimpleBeansimpleBean;
  4. privateMarshallermarshaller;
  5. privateUnmarshallerunmarshaller;
  6. publicvoidsetMarshaller(Marshallermarshaller){
  7. this.marshaller=marshaller;
  8. }
  9. publicvoidsetUnmarshaller(Unmarshallerunmarshaller){
  10. this.unmarshaller=unmarshaller;
  11. }
  12. publicvoidsaveSimpleBean()throwsIOException{
  13. FileOutputStreamos=null;
  14. try{
  15. os=newFileOutputStream(FILE_NAME);
  16. this.marshaller.marshal(simpleBean,newStreamResult(os));
  17. }finally{
  18. if(os!=null){
  19. os.close();
  20. }
  21. }
  22. }
  23. publicvoidloadSimpleBean()throwsIOException{
  24. FileInputStreamis=null;
  25. try{
  26. is=newFileInputStream(FILE_NAME);
  27. this.simpleBean
  28. =(SimpleBean)this.unmarshaller.unmarshal(newStreamSource(is));
  29. }finally{
  30. if(is!=null){
  31. is.close();
  32. }
  33. }
  34. }
  35. publicstaticvoidmain(String[]args)throwsIOException{
  36. ApplicationContextappContext
  37. =newClassPathXmlApplicationContext("applicationContext.xml");
  38. OXMExampleex=(OXMExample)appContext.getBean("oxmExample");
  39. ex.go();
  40. }
  41. privatevoidgo()throwsIOException{
  42. simpleBean=getSimpleBean();
  43. saveSimpleBean();
  44. loadSimpleBean();
  45. System.out.println("name:"+simpleBean.getName());
  46. System.out.println("jobdescription:"+simpleBean.getJobDescription());
  47. System.out.println("age:"+simpleBean.getAge());
  48. System.out.println("executive:"+simpleBean.isExecutive());
  49. }
  50. privateSimpleBeangetSimpleBean(){
  51. SimpleBeansimpleBean=newSimpleBean();
  52. simpleBean.setAge(35);
  53. simpleBean.setExecutive(false);
  54. simpleBean.setJobDescription("Janitor");
  55. simpleBean.setName("MisterJones");
  56. returnsimpleBean;
  57. }
  58. }

要解釋清單2,必須首先介紹main方法,因?yàn)樵摲椒▽⑾葓?zhí)行。然后再接著介紹清單2,首先,在main方法中,您的代碼捕獲Spring應(yīng)用程序的上下文,就是您在清單1中看到的配置文件。這個(gè)文件必須在類路徑中,否則運(yùn)行代碼將產(chǎn)生一個(gè)異常。 #p#

當(dāng)您獲得應(yīng)用程序上下文時(shí),OXMExample的一個(gè)實(shí)例從該配置文件中提供的定義創(chuàng)建。注意,這個(gè)bean在代碼中的名稱(oxmExample)與配置文件中定義的名稱(見(jiàn)清單1)一致。創(chuàng)建OXMExample的一個(gè)實(shí)例后,調(diào)用go()方法。這有點(diǎn)反常,因?yàn)镾pring框架實(shí)例化一個(gè)已經(jīng)從命令行運(yùn)行的對(duì)象,但那只是為了實(shí)現(xiàn)演示目的而進(jìn)行的簡(jiǎn)化。go()方法在打印結(jié)果數(shù)據(jù)前完成3個(gè)任務(wù):

1.創(chuàng)建SimpleBean的一個(gè)實(shí)例。
2.編組該實(shí)例。
3.解組從編組創(chuàng)建的XML文檔。

您使用getSimpleBean()方法實(shí)例化一個(gè)包含一個(gè)虛擬員工的信息的SimpleBean對(duì)象。這個(gè)信息包含年齡(一個(gè)整數(shù))、工作描述(一個(gè)字符串)、姓名(一個(gè)字符串)和該員工是否是執(zhí)行官(一個(gè)布爾型)。您使用測(cè)試數(shù)據(jù)和返回調(diào)用者的返回對(duì)象(在本例中為go()方法)填充字段。您在編組發(fā)生時(shí)將這個(gè)bean寫入一個(gè)XML文件,在解組發(fā)生時(shí)讀取那個(gè)XML文件的內(nèi)容。

saveSimpleBean()方法執(zhí)行編組。首先,您獲得一個(gè)指向simplebean.xml的對(duì)象,然后,您使用編組器對(duì)象(通過(guò)Spring的依賴項(xiàng)注入實(shí)例化)調(diào)用marshal方法。這個(gè)方法需要兩個(gè)參數(shù):

◆要被編組的對(duì)象(本例中為SimpleBean實(shí)例)
◆一個(gè)StreamResult對(duì)象,它基本上表示一個(gè)XML輸出抽象

loadSimpleBean()方法執(zhí)行解組。首先,您獲取一個(gè)指向simplebean.xml的FileInputStream對(duì)象,然后,您使用解組器對(duì)象(通過(guò)Spring的依賴項(xiàng)注入實(shí)例化)調(diào)用unmarshal方法。唯一需要的參數(shù)是一個(gè)包裝FileInputStream對(duì)象的StreamSource對(duì)象。注意,解組將創(chuàng)建一個(gè)泛型對(duì)象,因此您必須將其顯式設(shè)置為SimpleBean類型。

即使這個(gè)類和Spring配置文件已經(jīng)就緒,您也還沒(méi)有準(zhǔn)備好運(yùn)行這段代碼。還記得清單1中的映射文件嗎?您還需要定義那個(gè)映射文件。定義代碼如清單3所示,而且,再說(shuō)一遍,它也必須在運(yùn)行時(shí)位于類路徑中。清單3.mapping.xml文件:

 
 
 

清單3中的映射文件特定于Object/XML映射的Castor實(shí)現(xiàn)。第一個(gè)元素(class)定義要映射到一個(gè)XML輸出的類。您必須指定完整路徑,map-to元素提供XML文件的根元素的名稱。這很重要,因?yàn)閄ML規(guī)范規(guī)定,每個(gè)XML文件必須有一個(gè)根元素。

每個(gè)field元素都將被映射到SimpleBean類中的一個(gè)特定字段。每個(gè)field元素的bind-xml子元素用于指定關(guān)于該字段的特定于XML的信息,如對(duì)應(yīng)的XML元素的名稱,每個(gè)字段的值應(yīng)該是一個(gè)元素值還是一個(gè)屬性值。如您所見(jiàn),在本例中,所有值都是元素值。

測(cè)試

盡管代碼已經(jīng)編寫完成,但在執(zhí)行這個(gè)應(yīng)用程序之前,您必須處理一些依賴項(xiàng),特定于Spring的依賴項(xiàng)有:

 
 
 
  1. org.springframework.asm-3.0.0.M4.jar
  2. org.springframework.beans-3.0.0.M4.jar
  3. org.springframework.context-3.0.0.M4.jar
  4. org.springframework.core-3.0.0.M4.jar
  5. org.springframework.expression-3.0.0.M4.jar
  6. org.springframework.oxm-3.0.0.M4.jar 

特定于Castor的依賴項(xiàng)有:

 
 
 
  1. castor-1.3-core.jar
  2. castor-1.3-xml.jar

您還需要commons-logging-1.1.1.jar和log4j-1.2.15.jar,因?yàn)镾pring框架需要它們,所有這些JavaArchive(JAR)文件必須在運(yùn)行時(shí)位于類路徑中。如果您在沒(méi)有這些依賴項(xiàng)的情況下試圖運(yùn)行代碼,您很可能會(huì)收到一個(gè)異常,指出某個(gè)類沒(méi)有找到。如果遇到這種情況,只需雙擊您的類路徑,確保所有的必要依賴項(xiàng)已就緒。事實(shí)上,要成功編譯這段代碼,您需要大部分JAR文件。

您可以使用您鐘愛(ài)的IDE或只是使用命令行來(lái)運(yùn)行OXMExample.class。要從命令行運(yùn)行,只需從您的工作目錄輸入java-cp[classpath]OXMExample,這里的[classpath]是指向剛才提到的所有依賴項(xiàng)(JAR文件和配置文件)的類路徑。首次運(yùn)行該程序后,一個(gè)名為simplebean.xml的新文件將出現(xiàn)在您的工作目錄中。該文件的內(nèi)容應(yīng)該如清單4所示,清單4.simplebean.xml文件:

 
 
 
  1. 35
  2. false
  3. Janitor
  4. MisterJones

清單4顯示了來(lái)自應(yīng)用程序的編組端的輸出,而清單5則顯示來(lái)自應(yīng)用程序的解組端的結(jié)果,這些結(jié)果將在您的控制臺(tái)中顯示,清單5.解組輸出:

 
 
 
  1. name:MisterJones
  2. jobdescription:Janitor
  3. age:35
  4. executive:false

現(xiàn)在,您已經(jīng)成功地完成了您的首次SpringO/X映射測(cè)試,現(xiàn)在最好做開(kāi)發(fā)人員應(yīng)該做的工作:修改代碼。向類添加字段并將它們映射到XML文件。刪除一些字段并將它們從XML文件中移除。參考Castor文檔,嘗試一些更復(fù)雜的工作,比如嵌套元素。您可以隨心所欲地嘗試各種可能性。

結(jié)束語(yǔ)

Spring的O/X映射接口是Spring框架的強(qiáng)大特性。借助它,您不僅可以將XML文檔轉(zhuǎn)換為Java對(duì)象,還可以將Java對(duì)象轉(zhuǎn)換為XML文檔。它利用Spring的一個(gè)關(guān)鍵優(yōu)勢(shì):依賴項(xiàng)注入。通過(guò)結(jié)合使用依賴項(xiàng)注入和Spring的O/XMapper,您可以輕松開(kāi)發(fā)一個(gè)解決方案,該方案可以使用任一O/X實(shí)現(xiàn),比如Castor、XBeans、JiBX、JAXB和XStream。由于各個(gè)特定實(shí)現(xiàn)是Spring強(qiáng)大的InversionofControl容器的一部分,開(kāi)發(fā)人員可以在多個(gè)特定O/X實(shí)現(xiàn)之間輕松切換而無(wú)需修改代碼。

Spring的O/XMapper還向開(kāi)發(fā)人員提供一個(gè)統(tǒng)一的異常層次結(jié)構(gòu),這意味著不管您使用哪個(gè)第三方實(shí)現(xiàn),拋出的運(yùn)行時(shí)異常都是相同的。再?gòu)?qiáng)調(diào)一次,這將有利于在多個(gè)O/X供應(yīng)商之間切換,在Java開(kāi)發(fā)社區(qū)中,提供XML支持的Java應(yīng)用程序非常熱門并且Spring框架被廣泛使用,因此Spring的O/XMapper將受到全世界Java應(yīng)用程序開(kāi)發(fā)人員的歡迎。


分享標(biāo)題:Spring中的Object/XML映射詳解
文章出自:http://m.5511xx.com/article/dhhpohc.html