為了高效地使用Spring,先了解Spring的一些特性:
1、Spring是一個非侵入(non-invasive)框架。Spring框架可以使應用程式程式碼對框架的依賴最小化。在Spring中配置JavaBean時甚至不需要引用Spring API,而且還可以對很多舊系統中未使用Spring的Java類進行配置。
2、Spring提供了一種一致的,在任何環境下都可以使用的程式設計模型。Spring應用程式不盡可以執行在Java和Web容器中,也可以執行在其他環境中,如桌面程式。在Spring中提供了一種程式設計模型來隔離應用程式程式碼和執行環境,以使程式碼對它的有一些環境的依賴達到最小化。
3、提高程式碼的重用性。Spring可以儘量避免在程式中硬編碼。它可以將應用程式中的某些程式碼抽象出來(一般是在XML中配置),以便使這些程式碼可以在其他程式使用。
4、Spring可以使系統架構更容易選擇。Spring的目標之一就是使應用的每一層都可以更容易更換。如在中間層可以在不同的O/R對映看見之間切換,而這種切換過程對商業邏輯的影響是非常小的。或是切換不同的MVC看見(Strats、Spring MVC),這樣做並不影響系統的中間層。
5、Spring並不重造輪子。儘管Spring所涉及的範圍非常廣,但是大多數應用並沒有自己實現,如O/R對映,就是使用很多流行的框架,如Hibernate。還有像連線池、分散式事務、遠端協議或其他的系統服務,Spring也是使用了已經存在的解決方案,而不是選擇自己去造。
Spring的核心技術:1、反向控制,2、面向方面程式設計,3、一致性抽象,4、異常處理,5、資源管理。
1、反向控制(Inversion of Control,IoC),也叫依賴注入
的那個一個物件需要另外一個物件時,在傳統的設計過程中,往往需要通過呼叫者建立被呼叫者的物件例項。但在Spring中,建立被呼叫者的工作不再由呼叫者來完成,而由Spring提供的ApplicationContext物件去完成建立,物件使用完後關閉ApplicationContext物件即可,被呼叫者預先在配置檔案中設定好即可,也就是說呼叫者被剝奪了建立被呼叫者的權利。因此,這種模式被稱為反向控制。在反向控制模式下,與一般被呼叫者的建立是由Spring IoC容器來完成的,因此也稱為依賴注入。
2、面向方面程式設計(AOP)
AOP現在是比較熱門的程式設計方式,但它並不是取代OOP,而是作為OOP的擴充套件和補充。在OOP中,類和介面的關係是一個層次(或是樹結構),子類會自動繼承父類的所有特性。這種繼承關係雖然是程式碼重用達到一定的高度,但在某些情況下,程式碼仍然會出現冗餘。如果想在同一層的兄弟節點(或是一些指定的節點)都插入一段寫日誌的程式碼。在這種情況下,如果採用OOP思想,最簡單的做法是將寫日誌的功能封裝在一個類中,然後在要寫日誌的類中呼叫。但這樣做有一個問題,如果要將寫日誌的功能關閉,或是傳遞不同的引數,就需要修改很多個不同呼叫點,而且很容易出現錯誤,而使用AOP,這個問題就很容易解決。
AOP採用的是一種“橫向切割”的方式(OOP實際上是縱向繼承)進行程式設計。所謂橫向切割,就是將類層次樹橫向切一刀,並且會自動在這一刀所波及到的類(節點)中插入相同的程式碼。也就是說,橫向切割的作用就是找到符合某一規則的類(如以Test開頭的類),並在這些類中插入統一的程式碼。浙西而被插入的程式碼並不在類中,而是寫在了方面(Aspect) 中,Aspect在AOP中的地位相當於Class在OOP中的地位。這樣在修改這些程式碼時,只需要修改Aspect中的程式碼,所有被插入的程式碼就會自動更改。在Spring中提供了自己的AOP框架,叫做Spring AOP,當然Spring也可以使用其他的AOP框架,如AspectJ和JBoss AOP。
為什麼要使用反向控制(IoC)
物件工廠模式按照傳統方式建立物件時,一般是在物件工廠的方法裡通過new關鍵字來建立相應的物件例項。然而這種方式建立的物件和物件工廠耦合度過高。為了降低耦合度,使用反向控制模式是最直接的方法。反向控制模式的核心思想就是使建立物件的過程在物件工廠外部進行,而物件工廠通過多型的方式來建立相應的物件(實際上是返回一個實現某個介面的物件)。
任何有應用價值的系統都至少有兩個類來相互配合工作。通過由一個主要的入口類來啟動程式,然後在這個來中建立另一個類的物件例項,並進行相應的操作。這種工作方式是由呼叫者主動建立物件例項,是主動的構造模式。
而如果使用IoC ,建立物件的任務並不是有呼叫者來完成的,是通過外部的協調者(在Spring中是Spring IoC容器)裡完成的。因此也可以認為呼叫者要依賴Spring IoC容器來獲得(或稱為注入)物件例項,所以也可以將IoC稱為依賴注入。