讀古今文學網 > Maven實戰 > 8.1.2 account-persist的主代碼 >

8.1.2 account-persist的主代碼

account-persist的Java主代碼位於默認的src/main/java目錄,包含Account.java、AccountPersistService.java、AccountPersistServiceImpl.java和AccountPersistException.java四個文件,它們的包名都是com.juvenxu.mvnbook.account.persist,該包名與account-persist的groupId com.juvenxu.mvnbook.account及artifactId account-persist對應。

Account類定義了賬戶的簡單模型,它包含id、name等字段,並為每個字段提供了一組getter和setter方法,見代碼清單8-2。

代碼清單8-2 Account.java

account-persist對外提供的服務在接口AccountPersistService中定義,其方法對應了賬戶的增、刪、改、查,見代碼清單8-3。

代碼清單8-3 AccountPersistService.java

當增、刪、改、查操作發生異常的時候,該服務則拋出AccountPersistException。

AccountPersistService對應的實現為AccountPersistServiceImpl,它通過操作XML文件實現賬戶數據的持久化。首先看一下該類的兩個私有方法:readDocument()和writeDocument(),見代碼清單8-4。

代碼清單8-4 AccountPersistServiceImpl.java第1部分

先看writeDocument()方法。該方法首先使用變量file構建一個文件輸出流,file是AccountPersistServiceImpl的一個私有變量,它的值通過SpringFramework注入。得到輸出流後,該方法再使用DOM4J創建一個XMLWriter,這裡的OutputFormat.createPrettyPrint()用來創建一個帶縮進及換行的友好格式。得到XMLWriter後,就調用其write()方法,將Document寫入到文件中。該方法的其他代碼用做處理流的關閉及異常處理。

readDocument()方法與writeDocument()對應,它負責從文件中讀取XML數據,也就是Document對象。不過,在這之前,該方法首先會檢查文件是否存在,如果不存在,則需要初始化一個XML文檔,於是借助DocumentFactory創建一個Document對象,接著添加XML元素,再把這個不包含任何賬戶數據的XML文檔寫入到文件中。如果文件已經被初始化了,則該方法使用SAXReader讀取文件至Document對象。

用來存儲賬戶數據的XML文件結構十分簡單,如下是一個包含一個賬戶數據的文件,見代碼清單8-5。

代碼清單8-5 賬戶數據的XML文件

這個XML文件的根元素是account-persist,其下是accounts元素,accounts可以包含零個或者多個account元素,每個account元素代表一個賬戶,其子元素表示該賬戶的id、姓名、電子郵件、密碼以及是否被激活等信息。

現在看一下readAccount()方法是如何從XML文檔讀取並構建Account對象的,見代碼清單8-6。

代碼清單8-6 AccountPersistServiceImpl.java第2部分

readAccount()方法首先獲取XML文檔的Document對象,接著獲取根元素的accounts子元素,這裡的ELEMENT_ACCOUNTS是一個靜態常量,其值就是accounts。接著遍歷accounts的子元素,如果當前子元素的id與要讀取的賬戶的id一致,並且基於該子元素構建Account對象,這也就是buildAccount()方法。

在buildAccount()方法中,先創建一個Account對象,然後當前XML元素的子元素的值設置該對象。Element的elementText()方法能夠根據子元素名稱返回子元素的值,與ELEMENT_ACCOUNTS類似,這裡使用了一些靜態常量表示id、name、email等XML中的元素名稱。Account對像設置完後就直接返回,如果XML文檔中沒有匹配的id,則返回null。

為了使本章內容不致過於冗長,這裡就不再介紹createAccount()、updateAccount()和deleteAccount()幾個方法的實現。感興趣的讀者可以參照DOM4J的文檔實現這幾個方法,過程應該非常簡單。

除了Java代碼,account-persist模塊還需要一個SpringFramework的配置文件,它位於src/main/resources目錄,其內容見代碼清單8-7。

代碼清單8-7 account-persist的Spring配置文件

該配置文件首先配置了一個id為propertyConfigurer的bean,其實現為PropertyPlaceholderConfigurer,作用是從項目classpath載入名為account-service.properties的配置文件。隨後的bean是accountPersistService,實現為AccountPersistServiceImpl,同時這裡使用屬性persist.file配置其file字段的值。也就是說,XML數據文檔的位置是由項目classpath下account-service.properties文件中persist.file屬性的值配置的。