Spring 的核心是個(gè)輕量級容器(container),實(shí)現(xiàn)了IoC(Inversion of Control)模式的容器。Spring的目標(biāo)是實(shí)現(xiàn)一個(gè)全方位的整合框架,在Spring框架下實(shí)現(xiàn)多個(gè)子框架的組合,這些子框架之間彼此可以獨(dú)立,也可以使用其它的框架方案加以替代,Spring希望提供一站式的框架整合方案。在某些情況下,利用Spring可以不必考慮設(shè)計(jì)模式。因?yàn)镾pring 其實(shí)就是遵從了J2EE的設(shè)計(jì)模式。
Spring框架具有以下特點(diǎn):
1. 面向接口的編程。面向接口的編程使開發(fā)者事先知道他們將利用對象的方法。在設(shè)計(jì)應(yīng)用時(shí)利用接口對我們獲取實(shí)現(xiàn)的靈活性大有幫助。同時(shí),利用接口使得各層之間的交互耦合性更為松散。
2. 測試更為容易。利用測試驅(qū)動開發(fā)是快速開發(fā)高質(zhì)量代碼的最佳途徑。它利用在編寫接口和實(shí)現(xiàn)之前先編寫客戶類(測試類)來驅(qū)動設(shè)計(jì)。諸如Eclipse這樣的主流IDE都允許在實(shí)現(xiàn)測試類的同時(shí)創(chuàng)建類和方法。Spring使得測試更加容易有如下兩個(gè)原因:1)可以在Junit測試用例中很容易的加載和利用 Spring管理的beans。這使得我們可以像平常一樣用任何客戶端與這些beans交互。2)類之間沒有綁定自己的依賴。這樣在測試類中可以忽略 Spring,只用設(shè)置模擬對象(mock objects)來處理依賴關(guān)系即可。
3. 減少耦合。為了創(chuàng)建一個(gè)容易維護(hù)和擴(kuò)展的應(yīng)用,將代碼與特定的資源(例如,可能使用了針對于某個(gè)特定數(shù)據(jù)庫的SQL函數(shù))緊密耦合是不明智的。當(dāng)然,如果有合適的函數(shù)可以迅速的實(shí)現(xiàn)功能時(shí),針對于某個(gè)特定數(shù)據(jù)庫通常是比較容易的。這種情況下,J2EE設(shè)計(jì)模式通常建議使用工廠模式來減少實(shí)現(xiàn)類與應(yīng)用之間的耦合。
4. 配置和綁定類之間的依賴關(guān)系。工廠模式使得我們可以輕松的從一個(gè)實(shí)現(xiàn)類切換到另一個(gè)實(shí)現(xiàn)類。接口和實(shí)現(xiàn)都可以配置在XML文件中并且可以方便的通過改變文件來改變實(shí)現(xiàn)類。
5. 支持對象/關(guān)系映射的工具。利用支持ORM類的優(yōu)點(diǎn)就是我們不再需要寫繁多的try/catch語句來捕獲API拋出的異常。Spring將這些異常封裝成為運(yùn)行時(shí)的異常(runtime exceptions),這樣使得開發(fā)者可以在適當(dāng)?shù)臅r(shí)候捕獲發(fā)異常。
使用Spring的優(yōu)點(diǎn):
1. Spring能消除在許多工程上對Singleton的過多使用。
2. Spring 能消除使用各種各樣格式的屬性定制文件的需要,在整個(gè)應(yīng)用和工程中,可通過一種一致的方法來進(jìn)行配置。
3. Spring能通過接口而不是類促進(jìn)好的編程習(xí)慣,減少編程代價(jià)到幾乎為零。
4. Spring被設(shè)計(jì)為讓使用它創(chuàng)建的應(yīng)用盡可能少的依賴于他的APIs。在Spring
5. 應(yīng)用中的大多數(shù)業(yè)務(wù)對象沒有依賴于Spring。
6. 使用Spring構(gòu)建的應(yīng)用程序易于單元測試。
7. Spring為數(shù)據(jù)存取提供了一致的框架,不論是使用JDBC或O/R mapping產(chǎn)品(如Hibernate)。
Spring 的上述優(yōu)點(diǎn),使得Spring 框架成為構(gòu)建信息發(fā)布系統(tǒng)模型層的首選框架。在本課題的實(shí)現(xiàn)過程中,使用了Spring管理的Bean,大大減少了代碼的編寫量的同時(shí),代碼質(zhì)量也有很大的保證。面向接口的編程模式,使得測試同一個(gè)接口的不同實(shí)現(xiàn)變得容易,只需要簡單的修改Spring的配置文件,極大地減少了編寫測試代碼的量。 Spring的代理模式和面向方面編程的能力,使得攔截一個(gè)方法調(diào)用并在調(diào)用之前或者之后執(zhí)行特定的操作變得簡單。課題實(shí)現(xiàn)過程中的粗話過濾利用了 Spring中面向方面的編程能力攔截信息插入操作,在插入操作執(zhí)行之前進(jìn)行粗話查詢和替換,從而實(shí)現(xiàn)了粗話過濾。在信息插入操作執(zhí)行之后進(jìn)行攔截,給相關(guān)的人員發(fā)送E-mail,以便于通知有事件發(fā)生。Spring中支持事務(wù)管理,同樣使用了攔截器模式,插入或者查詢操作執(zhí)行過程中使用事務(wù),保證了數(shù)據(jù)庫操作代碼的安全性,Spring中可以使用聲明式的事務(wù)管理。對事務(wù)的所有操作都在配置文件中進(jìn)行配置,無須硬編碼到Java代碼中,使得底層的數(shù)據(jù)庫操作實(shí)現(xiàn)類只專注于正常情況下的數(shù)據(jù)庫的操作,其他的事情完全由Spring代理,降低了代碼編寫的難度和復(fù)雜度,并提高了代碼質(zhì)量。