1. 程式人生 > >學習《spring 3.x企業應用開發實戰》之使用OXM進行物件XML對映

學習《spring 3.x企業應用開發實戰》之使用OXM進行物件XML對映

1、認識XML解析技術 1.1、XML相關概念 (1)DTD:XML語法規則,是XML檔案的驗證機制,可以通過比較XML文件和DTD檔案看文件是否符合規範,元素和標籤是否使用正確。 (2)XML是SOA的基礎。 1.2、XML處理技術 (1)為了使用XML,我們需要通過XML處理器或XML API 來訪問資料,目前JAXP提供了2種處理XML的方法:DOM和SAX。 ①DOM:DOM通過程式設計方式對XML文件中資料及結構進行訪問,基於XML文件在記憶體中的樹狀結構。其缺點是將整個XML文件裝入記憶體需要很大開銷。 ②SAX:基於事件驅動,用到一段解析一段,解決了DOM佔用記憶體大的問題,但其缺點是無法隨機訪問文件。 (2)為了解決DOM和SAX的問題,一種基於流的Stream API for XML(簡稱StAX)出現了,目前已加入到JDK6的JAXP1.4裡面,StAX也是基於事件驅動。 (3)DOM、SAX和StAX都是從文件結構出發處理XML的,但很多應用程式僅僅關注文件資料本身,所以XML資料繫結技術應運而生。 資料繫結
:是指將資料從儲存媒介(XML文件和資料庫中)抽取出來,並通過程式表示這些資料的過程,即把資料繫結到虛擬機器能夠理解並且可以操作的某種記憶體結構中。 XML繫結框架:Castor,JAXB,JiBX,Quick,Zeus等。 2、XML處理利器:XStream 2.1、XStream概述 (1)XStream是一套簡潔易用的開源框架,用於將Java物件序列化為XML,或者將XML反序列化為Java物件。XStream主要特點:
(2)XStream架構組成:
  • Converters(轉換器):當XStream遇到需要轉換的物件時,它會委派給合適的轉換器實現。
  • IO(輸入/輸出):XStream是通過HierarchicalStreamWriter和HierarchicalStreamReader從底層XML資料中抽象而來,分別用於序列化和反序列化操作。
  • Context(上下文):XStream序列化反序列化物件時會建立2個類MarshallingContext和UnmarshallingContext,由塔門來處理資料並委派給合適的轉換器。
  • Facade(統一入口):將上面的3點整合在一起,以統一的介面開放給使用者使用。
2.2、快速入門 (1)建立一個XStream,並指定XML解析器 XStream xstream=new XStream(new DomDriver()); 如果不指定解析器,XStream會預設採用XPP(XML Pull Parser)解析器,XPP是一種高速解析器。 (2)示例如下:
2.3、使用XStream別名
(1)在上面的示例中,java物件的全類名對應XML檔案的根元素,屬性名對應XML檔案的節點元素,但在實際情況中,java物件和XML物件可能都已經定義好了名字,這時就需要使用別名對映。 XStream有3種別名配置情況:
  • 類別名:用alias(String name, Class type)。
  • 類成員別名:用aliasField(String alias, Class definedIn, String fieldName)。
  • 類成員作為屬性別名:用aliasAttribute(Class definedIn, String attributeName, String alias),單獨命名沒有意義,還要通過useAttributeFor(Class definedIn, String fieldName)應用到某個類上。
(2)通過別名修改2.2中示例:
2.4、XStream轉換器 在開發過程中,有時候需要轉換一些自定義的型別,只要實現Converter介面,並呼叫XStream的registerConverter()方法註冊轉換器就可以。 2.5、XStream註解 (1)XStream常用註解如下:
(2)使用 XStream xstream=new XStream(new DomDriver()); 載入物件有2種方式: ①方式一: xstream.processAnnotations(AAA.class); xstream.processAnnotations(BBB.class); ②方式二: xstream.autodetectAnnotations(true);//自動載入註解bean,而且還快取了標註的物件 2.6、流化物件 (1)XStream為ObjectInputStream和ObjectOutputStream提供了替代實現,允許以物件流的方式進行XML序列化或反序列化操作。前面是基於DOM的XML解析器讀取的XML,這裡我們顯然應該使用流的方式進行解析。 示例如下:
(2)使用PrettyWriter和CompactWriter的區別就在於PrettyWriter會格式化生成的XML,而CompactWriter會壓縮生成的XML。 2.7、持久化API (1)XStream提供了一套簡單的方式,可以將集合中的物件持久化到檔案中,如:XmlArrayList、XmlSet、XmlMap等。 (2)在建立集合之前,還需要指定一個持久化策略PersistenceStrategy。 2.8、處理JSON (1)XML在Web Service中有不可動搖的地位,但是在大多數web應用中,還是多采用輕量級的JSON作為資料交換格式。 (2)XStream提供了JettisonMappedXmlDriver和JsonHierarchicalStreamDriver來完成java物件和json的轉換工作。 示例如下:
(3)JettisonMappedXmlDriver和JsonHierarchicalStreamDriver的區別: ①JettisonMappedXmlDriver生成的是壓縮的JSON,而JsonHierarchicalStreamDriver生成的是格式化的JSON。 ②要想將JSON轉換為物件,只能使用JettisonMappedXmlDriver。 3、其他常見的 O/X Mapping開源專案 JAXB、XMLBeans、Cstor、JiBX的比較:

4、與Spring OXM整合 4.1、Spring OXM概述 (1)Spring OXM對主流O/X Mapping框架做了一個統一的抽象和封裝,Marshaller和Unmarshaller是Spring OXM兩個核心介面。Marshaller用於將物件轉成XML,Unmarshaller用於將XML轉成物件。 (2)各O/X Mapping元件包裝器如下:
4.2、在Spring中進行配置 (1)XStreamMarshaller配置例項:

5、小結 (1)java應用程式的XML資料繫結可以歸納為2種方式:
  • 根據XML文件生成Java語言程式碼(如JAXB、XMLBeans、Castor)。
  • 使用某種形式的對映繫結方法,也就是設定Java類如何與XML進行關聯(如XStream、Castor、JiBX)。
(2)2種方式比較:
  • 使用由Schema或DTD定義的穩定文件結構,並且該結構適合應用程式的需要,則程式碼生成方法可能是最佳選擇。
  • 如果使用現有的Java類,或者希望使用類的結構,該結構反映應用程式對資料的用法,而不是XML結構,則對映方法是最佳選擇。

相關推薦

學習spring 3.x企業應用開發實戰使用OXM進行物件XML對映

1、認識XML解析技術 1.1、XML相關概念 (1)DTD:XML語法規則,是XML檔案的驗證機制,可以通過比較XML文件和DTD檔案看文件是否符合規範,元素和標籤是否使用正確。 (2)XML是SOA的基礎。 1.2、XML處理技術 (1)為了使用XML,我們需要通過X

學習spring 3.x企業應用開發實戰Spring的事務管理

1、資料庫事務基礎知識 1.1、資料庫事務的概念 (1)資料庫事物的4個特性(ACID): 原子性(Atomic):表示組成一個事務的多個數據庫操作是一個不可分割的原子單元,所有的操作要麼全部成功,要麼全部失敗。一致性(Consistency):事務操作成功之後,資料庫所

Spring 3 x 企業應用開發實戰 含CD光碟1張

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

SpringSpring 3.x企業應用開發實戰(6)----BeanFactory

BeanFactory是一個類工廠,是類的通用工廠。不多說,直接進入BeanFactory的使用: 首先建一個Bean類,Car.java package com.techman.reflect

Spring 入門例項 簡易登入系統(精通Spring+4.x++企業應用開發實戰 學習筆記一)

論壇登入模組 在持久層有兩個DAO類,分別是UserDao和LoginLogDao,在業務層對應一個業務類UserService,在展現層擁有一個LoginController類和兩個JSP頁面,分別是登入頁面login.jsp和登入成功頁面main.js

《精通Spring+4.x++企業應用開發實戰》讀後感

來講 ring 如果 項目 企業 xml配置 登錄 了解 能夠 引言 還記得大三時上培訓班的是時候,當時的培訓老師說自己是本地講解spring最好的講師,但是後來等我實習了看了《Spring 3.x 企業應用開發實戰》以及後續版本《精通Spring+4.x++企業應用開發實

《精通Spring4.x企業應用開發實戰》第三章

  這一章節主要介紹SpringBoot的使用,也是學習的重點內容,之後就打算用SpringBoot來寫後臺,所以提前看一下還是很有必要的。   3.SpringBoot概況 3.1.1SpringBoot發展背景   Spring Boot的出現。Spring Boot可讓開發人員不再需要編寫複雜的XML配

精通Spring+4.x++企業開發與實踐學習SpringBoot

#SpringBoot 在SpringBoot1.2以前使用@Configuration,@ComponentScan,@EnableAutiCofiguration註解標識啟動類,到了SpringBoot1.2時,直接使用@SpringBootApplication代替。 #

Spring Boot 企業級應用開發實戰

-o .com 註解 ping 折騰 jar 服務 開啟 blog Spring Boot 企業級應用開發實戰【下載地址:https://pan.baidu.com/s/1SbB-auGkUN6r2i6dtv7t_w 】 Spring Boot是目前Spring技術體系中炙

基於Python的Web應用開發實戰——3 模板

要想開發出易於維護的程式,關鍵在於編寫形式簡潔且結構良好的程式碼。 當目前為止,你看到的示例都太簡單,無法說明這一點,但Flask檢視函式的兩個完全獨立的作用卻被融合在了一起,這就產生了一個問題。   檢視函式的作用很明確,即生成請求的響應。 如第2章中的示例,對簡單的請求來所,這就足夠了。

(Flask Web開發:基於Python的Web應用開發實戰)------學習筆記(第2章)

第2章 程式的基本結構 本章將帶你瞭解 Flask 程式各部分的作用,編寫並執行第一個 Flask Web 程式。 2.1 初始化   所有 Flask 程式都必須建立一個程式例項,程式例項是 Flask 類的物件。   Web 伺服器使用一種名為 Web 伺服器閘

《FlaskWeb開發基於Python的Web應用開發實戰第2版》中英PDF+源代碼等4本書學習

開發實戰 leo 能夠 ffffff 第二版 http 資源 web開發 vpd 資源鏈接:https://pan.baidu.com/s/1p7CyLEodCy3e1u93jTVQLg《Flask Web開發 基於Python的Web應用開發實戰第2版》中英PDF+源代碼

談談Spring Boot 企業級應用開發實戰

Spring Boot是目前Spring技術體系中炙手可熱的框架之一,既可用於構建業務複雜的企業應用系統,也可以開發高效能和高吞吐量的網際網路應用。Spring Boot框架降低了Spring技術體系的使用門檻,簡化了Spring應用的搭建和開發過程,提供了流行的第三方開源技術的自動整合。 推薦

精通Spring+4.x++企業開發與實踐SpEL

java支援動態語言javascript 例子: ScriptEngineManager manager = **new** ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName(**"JavaScript"

精通Spring+4.x++企業開發與實踐基於@AspectJ和Schema的AOP

#  精通Spring+4.x++企業開發與實踐之基於@AspectJ和Schema的AOP 使用@AspectJ的條件 1.保證是java5以上的版本(需要使用註解,而java5及以上才使用註解) 2.需要將Spring的asm(輕量級的位元組碼處理框架)的模組新增

精通Spring+4.x++企業開發與實踐SpringAOP基礎

AOP概述 AOP的簡稱"Aspect Oriented Programing"的簡稱———面向切面程式設計。 AOP術語 連線點 一個類或者一段程式程式碼用於一些具有邊界性質的特性的特定點。這些程式碼的特定點就被成為"連線點"。Spring只支援方法的連線點,即僅能在方法呼叫前,方

精通Spring+4.x++企業開發與實踐Spring容器高階主題

Spring容器高階主題 內部工作機制 Spring的AbstractApplicationContext是ApplicationContext的抽象實現類,該抽象類的refresh()方法定義了Spring容器在載入配置檔案後的各項處理過程這些處理過程清晰的刻畫了Spring容器啟動時所執

精通Spring+4.x++企業開發與實踐IoC容器中裝配Bean

Spring配置概述 Spring屬性注入 JavaBean關於屬性命名的特殊規範 Spring配置檔案中的<property></property>元素所指定的屬性名和Bean實現類的Setter方法滿足Sun JavaBean的屬性命名規範:xxx的屬性對應的

精通Spring+4.x++企業開發與實踐IOC容器

#IOC容器 #類裝載器ClassLoader 尋找類的位元組碼檔案並構造出類再JVM內部標識物件的元件。再Java中, 類裝載器吧一個類裝入JVM,需要入如步驟: (1)裝載:查詢和匯入Class檔案. (2)連結:執行校驗,準備和解析步驟,其中解析步驟是可以選擇的。 1.準備:給

Python 3網絡爬蟲開發實戰+精通Python爬蟲框架Scrapy學習資料

分布式 過多 博客 開發實戰 pyquery 閱讀 表達式 故障 hub 《Python 3網絡爬蟲開發實戰》介紹了如何利用Python 3開發網絡爬蟲,首先介紹了環境配置和基礎知識,然後討論了urllib、requests、正則表達式、Beautiful Soup、XPa