1、Spring 對 DAO的支持
Spring支持目前大多數(shù)常用的數(shù)據(jù)持久化技術(shù)导梆,Spring定義了一套面向DAO層的異常體系轨淌,并未各種支持的持久化技術(shù)提供了異常轉(zhuǎn)換器。這樣看尼,我們在設(shè)計DAO接口時递鹉,就可以拋開具體的實現(xiàn)技術(shù),定義統(tǒng)一的接口藏斩。
不管采用 何種持久化技術(shù)躏结,訪問數(shù)據(jù)的流程是相對固定的。Spring將數(shù)據(jù)訪問流程劃分為固定和變化兩個部分灾茁,并以模板的方式定好流程窜觉,用回調(diào)接口將變化的部分開放出來谷炸,留給開發(fā)者自行定義。這樣禀挫,我們僅需要提供業(yè)務(wù)相關(guān)的邏輯就可以完成整體的數(shù)據(jù)訪問了旬陡。
Spring為了進一步簡化持久模板類的使用,為各個持久化技術(shù)提供了便捷的支持類语婴,支持類不但包含數(shù)據(jù)訪問模板描孟,還包含數(shù)據(jù)源或會話等內(nèi)容。通過擴展支持類定義自己的數(shù)據(jù)訪問類是最簡單的數(shù)據(jù)訪問方式砰左。
不管采用何種持久化技術(shù)匿醒,都需要定義數(shù)據(jù)源。在實際部署中缠导,我們可能會采用應(yīng)用服務(wù)器本身提供的數(shù)據(jù)源廉羔,這時,則可以通過JndiObjectFactoryBean或jee命名空間引用JNDI中的數(shù)據(jù)源僻造。
2憋他、Spring的事務(wù)管理
Spring使聲明式事務(wù)平民化,事務(wù)作為一個切面織入到目標業(yè)務(wù)方法的周圍髓削,業(yè)務(wù)方法完全從事務(wù)代碼中解脫出來竹挡,代碼的復(fù)雜度大大降低。被織入的事務(wù)代碼基于Spring事務(wù)同步管理器進行工作立膛,事務(wù)同步管理器維護著業(yè)務(wù)類對象線程相關(guān)資源揪罕。DAO類需要利用資源獲取工具訪問底層數(shù)據(jù)連接,或者直接建立在相應(yīng)持久化模板類的基礎(chǔ)上宝泵。
Spring的事務(wù)配置主要提供兩方面的信息:其一好啰,切點信息,用于定位實施事務(wù)切面的業(yè)務(wù)類方法鲁猩;其二坎怪,控制事務(wù)行為的事務(wù)屬性,這些屬性包括事務(wù)隔離級別廓握、事務(wù)傳播行為搅窿、超時時間、回滾規(guī)則隙券。
3男应、Spring事務(wù)管理難點剖析
在沒有事務(wù)管理的情況下,DAO照樣可以順利進行數(shù)據(jù)操作娱仔;
將應(yīng)用分為Web沐飘、Service及DAO層只是一種參考的開發(fā)模式,并非是事務(wù)管理工作的前提條件;Spring通過事務(wù)傳播機制可以很好地應(yīng)對事務(wù)方法嵌套調(diào)用的情況耐朴,開發(fā)者無須為了事務(wù)管理而可以改變服務(wù)方法的設(shè)計借卧;
經(jīng)過事務(wù)管理增強的到實例Bean不存在線程安全問題,可以很好地工作在多線程環(huán)境下筛峭;
混合使用多個數(shù)據(jù)訪問框架的最佳組合是一個ORM技術(shù)框架(Hibernate 或 JPA)+ 一個JDBC技術(shù)框架(Spring JDBC 或 iBatis)铐刘。直接使用ORM技術(shù)框架對應(yīng)的事管理器就行了,但必須考慮ORM緩存同步問題影晓;
Spring AOP增強有兩個方案:其一是基于接口的動態(tài)代理镰吵,其二為基于CGLib動態(tài)生成子類的代理。由于Java語言的特性挂签,有些特殊方法不能被Spring AOP代理疤祭,所以無法享受AOP織入到來的事務(wù)增強;
使用Spring JDBC時如果直接使用Connection饵婆,可能會造成連接泄漏勺馆。為降低連接泄漏的可能性,盡量使用DataSourceUtils獲取數(shù)據(jù)連接啦辐。也可以對數(shù)據(jù)源進行代理谓传,以便數(shù)據(jù)源擁有感知事務(wù)上下文的能力蜈项;
4芹关、使用Spring JDBC訪問數(shù)據(jù)庫
- JdbcTemplate 使用大量的回調(diào)接口完成數(shù)據(jù)的訪問操作,StatementCallback紧卒、PreparedStatementCallback侥衬、CallableStatementCallback、BatchPreparedStatementSetter以及RowMapper是其中常用的回調(diào)接口跑芳,一般可以通過匿名內(nèi)部類實現(xiàn)這些回調(diào)接口轴总,使代碼更加緊湊;
5博个、整合其他ORM框架
Sprng為其所支持的ORM框架提供方便易用的FactoryBean用以創(chuàng)建ORM框架的基礎(chǔ)設(shè)施怀樟。Spring通過模板類在不損失框架功能的前提下大大降低了使用這些ORM技術(shù)的難度。但也允許用戶使用框架原生的API構(gòu)造DAO盆佣,使用原生API時往堡,Spring能保證用戶獲取到事務(wù)綁定的資源,Spring的事務(wù)管理機制同樣有效共耍;
具體的應(yīng)用一般會定義一個項目級的DAO基類虑灰,簡化接口方法、添加泛型支持痹兜,一個設(shè)計良好的DAO積累可以大大減少DAO層整體代碼的總量穆咐,提高項目開發(fā)效率。