第五章
dao應該以接口的方式發(fā)布功能,而應用程序的其他部分通過接口來訪問dao,實現(xiàn)代碼的松散耦合
數(shù)據(jù)訪問層是以持久化技術(shù)無關的方式來進行訪問的。持久化方式的選擇獨立于dao層,只有相關的數(shù)據(jù)訪問方法通過接口來發(fā)布供其他應用程序來調(diào)用。這樣靈活的設計即使切換到其他的持久化框架后也能對系統(tǒng)產(chǎn)生較小的影響
spring框架提供了與持久化平臺無關的持久化異常。簡單來說就是無論使用了哪種持久化框架,spring如果兼容它,那么就會將對應的持久化平臺的異常統(tǒng)一地“翻譯”為spring中的一套持久化異常體系。其中,這些異常都繼承自DataAccessException類
spring在數(shù)據(jù)訪問層采用了模板化思想,使用了設計模式:模板方法模式
模板方法定義了過程得主要框架。它將過程中與特定實現(xiàn)相關的部分委托給接口,而這個接口得不同實現(xiàn)定義了過程中的具體行為
spring將數(shù)據(jù)訪問過程中固定的部分,稱為模板(如繼承了spring的dao基類后,開閉數(shù)據(jù)庫連接的操作框架將會處理,無需手動干預);將可變的部分,稱為回調(diào)(如繼承了spring的dao基類后,需要自己實現(xiàn)的自定義方法)。這種設計方式,被稱為:模板-回調(diào)設計
spring支持3種形式的數(shù)據(jù)源:jdbc驅(qū)動定義、jndi查找和連接池
在spring中:
jdbc驅(qū)動定義的數(shù)據(jù)源是最簡單的定義方式。由于不支持多線程程序,且只有一個數(shù)據(jù)連接對象,每次都會新創(chuàng)建數(shù)據(jù)連接對象,開銷大,不推薦使用
jndi需要在服務器上查找數(shù)據(jù)源配置,可以在應用程序之外管理數(shù)據(jù)源,獲得更好的性能
連接池一般通過dbcp三方連接池實現(xiàn)驅(qū)動。BasicDataSource類是最常用的數(shù)據(jù)連接bean,它類似于jdbc驅(qū)動定義中的DriverManagerDataSource類(每次請求都會創(chuàng)建一個新連接對象)
持久化到數(shù)據(jù)庫時定義的業(yè)務對象,一開始是遵循ejb規(guī)范中的ejb的,因為比較重量級,近年來已經(jīng)從ejb切換到pojo開發(fā)模式中來了(即現(xiàn)在通常所稱的po、entity等dao層的業(yè)務持久化Java對象)
總結(jié):
對為什么dao要設計成接口有了更深的理解
spring對于數(shù)據(jù)持久層的設計應用了模板方法的設計模式
一般開發(fā)時的數(shù)據(jù)源使用連接池,可以復用,統(tǒng)一動態(tài)分配和管理,節(jié)約資源
第六章
全有或全無的操作,稱為事務。它是一個期望全發(fā)生或全部不發(fā)生的工作單元,保證數(shù)據(jù)的完整性
事務的acid特性:原子性、一致性、隔離性和持久性
spring提供了編碼式和聲明式事務的支持:
編碼式事務:
優(yōu)點:能通過代碼精確地控制事務邊界
缺點:侵入性實現(xiàn)
聲明式事務:
通過spring aop方式實現(xiàn)
優(yōu)點:由于應用在方法級別,可維護性較高
缺點:粒度沒有編碼式事務那么細
spring不直接管理事務,它是通過提供的多種事務管理器來實現(xiàn)事務的。spring為每個持久化框架提供的事務管理器都不同,需要有選擇地使用
事務的屬性:傳播行為、隔離級別、只讀、事務超時和回滾規(guī)則
<tx:annotation-driven>元素用于開啟注解式事務配置。它來告訴spring檢查應用上下文所有以@Transaction注解的bean
總結(jié):
進一步明確了事務的5個屬性。如隔離級別中的若干項需要根據(jù)實際業(yè)務進行取舍,選擇最合適的隔離級別
了解了spring支持兩種事務的實現(xiàn)方式:編碼式事務和聲明式事務。且聲明式事務是通過spring aop來實現(xiàn)的