Spring介紹

elevenxl發表於2008-03-09
剛接觸Spring的時候做的一些筆記,主要是關於Spring的簡單介紹等...

Spring是一個開源框架,由Rod Johnson建立。它視為了解決企業應用開發的複雜性而建立的。Spring使用基本的JavaBean來完成以前只能由EJB完成的事情。然而,Spring的用途不僅限於伺服器端的開發。從簡單性、可測試性和鬆耦合的角度而言,任何Java應用都可以從Spring中受益。

簡單來說,Spring是一個輕量級的控制反轉(IoC)和麵向切面(AOP)的容器框架。
    輕量-從大小和開銷兩個方面而言Spring都是輕量的。Spring應用中的物件不依賴於Spring的特定類。
    控制反轉-Spring通過IoC技術促進了鬆耦合。當應用其的時候,一個物件依賴的其他物件會通過被動的方式傳遞進來,而不是這個物件自己建立或者查詢依賴物件。可以理解成為IoC和JNDI相反。
    面向切面-Spring提供了面向切面程式設計的豐富支援,允許通過分離應用的業務邏輯與系統級服務進行內聚性的開發。應用物件只實現它們應該做的-完成業務邏輯-僅此而已。它們不負責其他的系統級關注點,例如日誌或事務支援。
    容器-Spring包含並管理應用物件的配置和生命週期,在這個意義上它是一種容器。然而,Spring不應該被混同於傳統的重量級EJB容器,它們經常是龐大與笨重的,難以使用。
    框架-Spring可以將簡單的組建配置、組合成為複雜的應用。在Spring中,應用物件被宣告式地組合,典型地是在一個XML檔案中。Spring也提供了很多基礎功能(事務管理、持久化框架整合等),將應用邏輯的開發留給了你。[不過從某種意義上來看,這樣增加了開發的複雜性,相當於手寫配置檔案]

Spring的歷史:
    Spring 的基礎架構起源於 2000 年早期,它是 Rod Johnson 在一些成功的商業專案中構
建的基礎設施。
    在 2002 後期,Rod Johnson 釋出了《Expert One-on-One J2EE Design and Development》
一書,並隨書提供了一個初步的開發框架實現—— interface21 開發包,interface21 就是書中闡述的思想的具體實現。後來, Rod Johnson 在 interface21 開發包的基礎之上,進行了進一步的改造和擴充,使其發展為一個更加開放、清晰、全面、
     2003 年 2 月 Spring 框架正式成為一個開源專案,併釋出於 SourceForge 中。

Spring的使命(Mission Statement):
    J2EE應該更加容易使用
    物件導向的設計比任何實現技術都重要
    面向介面程式設計,而不是針對類程式設計。Spring將使用介面的複雜度降低到零。
    程式碼應該易於測試[這個使命其實是和敏捷中的測試驅動開發方法有相照應的地方]
    JavaBean提供了應用程式配置的最好方法
    在Java中,已檢查異常(Checked exception)被過度使用。框架不應該迫使你捕獲不能恢復的異常。

Spring受到的批判:
    Spring不是一個“標準”。不是J2EE規範的一部分,沒有通過JCP(Java Community Process)的稽核認可。
    Spring是“超重量級”的。由於Spring涉及的內容很多(例如:jdbc,ORM,遠端訪問等),但其本質還是Java技術的龐大。Spring只是為了這些技術提供更好的使用方案而已。同時,你可以選擇你需要使用的部分。

Spring包含的模組:
    七個部分:
    Spring AOP
    Spring ORM
    Spring Web
    Spring Web MVC
    Spring DAO
    Spring Context
    Spring Core
    作為一個整體,這些模組為你提供哦了開發企業應用所需的一切。但你不必將應用完全基於Spring框架。你可以自由地挑選適合你的應用的模組而忽略其他的模組。
    所有的Spring模組都是核心容器之上構建的。

核心容器:
    這是Spring框架裡最基礎的部分,它提供了依賴注入(Dependency Injection)特徵來實現容器對Bean的管理。這裡最基本的概念是BeanFactory,它使用IoC將應用配置和依賴說明從實際的應用程式碼中分離出來。

應用上下文(Context)模組:
    核心模組的BeanFactory使Spring成為一個容器,而上下文模組使它成為一個框架。這個模組擴充套件了BeanFactory的概念,增加了對國際化(I18N)訊息、事件傳播以及驗證的支援。
    另外,這個模組提供了許多企業服務。例如電子郵件JNDI訪問、EJB整合、遠端以及時序排程(scheduling)服務。也包括了對模板框架例如Velocity和FreeMarker整合的支援。

Spring的AOP模組:
    Spring在它的AOP模組中提供了對面向切面程式設計的豐富支援。這個模組是在Spring應用中實現切面程式設計的基礎。為了確保Spring與其他AOP框架的互用性,Spring的AOP支援基於AOP聯盟定義的API。AOP聯盟是一個開源專案,它的目標是通過定義一組共同的介面和元件來促進AOP的使用以及不同的AOP實現之間的互用性。
    Spring的AOP模組也將後設資料程式設計引入了Spring,使用Spring的後設資料支援,你可以為你的原始碼增加註釋,指示Spring在何處如何應用切面函式。

JDBC抽象和DAO模組:
      使用 JDBC 經常導致大量的重複程式碼,取得連線、建立語句、處理結果集,然後關閉Spring 的 JDBC 和 DAO 模組抽取了這些重複程式碼,因此你可以保持你的資料庫訪問連線。程式碼乾淨簡潔,並且可以防止因關閉資料庫資源失敗而引起的問題。
    這個模組還在幾種資料庫伺服器給出的錯誤訊息之上建立了一個有意義的異常層。使你不用再試圖破譯神祕的私有的 SQL 錯誤訊息!
    另外,這個模組還使用了 Spring 的 AOP 模組為 Spring 應用中的物件提供了事務管理服務。

ORM(物件/關係 對映整合模組):
       對那些更喜歡使用物件 / 關係對映工具而不是直接使用 JDBC 的人, Spring 提供了ORM 模組。Spring 並不試圖實現它自己的 ORM 解決方案,而是為幾種流行的 ORM 框架提供了整合方案,包括Hibernate、JDO 和 iBATIS SQL 對映。Spring 的事務管理支援這些ORM 框架中的每一個也包括 JDBC。

Spring的Web模組:
    Web 上下文模組建立於應用上下文模組之上,提供了一個適合於 Web 應用的上下文。例如:實現檔案上傳的 multipart 請求,它也另外,這個模組還提供了一些面向服務支援。提供了 Spring 和其它 Web 框架的整合,比如 Struts、WebWork。

Spring的MVC框架:
    Spring 為構建 Web 應用提供了一個功能全面的 MVC 框架。雖然 Spring 可以很容易地與其它 MVC 框架整合,例如 Struts,但 Spring 的 MVC 框架使用 IoC 對控制邏輯和業務物件提供了完全的分離。

總結:
      Spring 帶來了複雜的 J2EE 開發的春天。它的核心是輕量級的 IoC 容器,它的目標是為J2EE 應用提供了全方位的整合框架,在 Spring 框架下實現多個子框架的組合,這些子框架之間可以彼此獨立,也可以使用其它的框架方案加以代替, Spring 希望為企業應用提供一站式(one-stop shop)的解決方案。



相關文章