1. 程式人生 > >Spring詳解(一)------概述

Spring詳解(一)------概述

目錄

 


  本系列教程我們將對 Spring 進行詳解的介紹,相信你在看完後一定能夠有所收穫

1、什麼是 Spring ?

  Spring是一個開源框架,Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來。它是為了解決企業應用開發的複雜性而建立的。框架的主要優勢之一就是其分層架構,分層架構允許使用者選擇使用哪一個元件,同時為 J2EE 應用程式開發提供整合的框架。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限於伺服器端的開發。從簡單性、可測試性和鬆耦合的角度而言,任何Java應用都可以從Spring中受益。Spring的核心是控制反轉(IoC)和麵向切面(AOP)。

  簡單來說,Spring是一個分層的JavaSE/EE full-stack(一站式) 輕量級開源框架。

2、Spring 起源

  Rod Johnson在2002年編著的《Expert one on one J2EE design and development》一書中,對Java EE 系統框架臃腫、低效、脫離現實的種種現狀提出了質疑,並積極尋求探索革新Spring Logo之道。以此書為指導思想,他編寫了interface21框架,這是一個力圖衝破J2EE傳統開發的困境,從實際需求出發,著眼於輕便、靈巧,易於開發、測試和部署的輕量級開發框架。Spring框架即以interface21框架為基礎,經過重新設計,並不斷豐富其內涵,於2004年3月24日,釋出了1.0正式版。同年他又推出了一部堪稱經典的力作《Expert one-on-one J2EE Development without EJB》,該書在Java世界掀起了軒然大波,不斷改變著Java開發者程式設計和開發的思考方式。在該書中,作者根據自己多年豐富的實踐經驗,對EJB的各種笨重臃腫的結構進行了逐一的分析和否定,並分別以簡潔實用的方式替換之。至此一戰功成,Rod Johnson成為一個改變Java世界的大師級人物。

3、Spring 特點

  ①、方便解耦,簡化開發

  通過Spring提供的IoC容器,我們可以將物件之間的依賴關係交由Spring進行控制,避免硬編碼所造成的過度程式耦合。有了Spring,使用者不必再為單例項模式類、屬性檔案解析等這些很底層的需求編寫程式碼,可以更專注於上層的應用。

  ②、AOP程式設計的支援

  通過Spring提供的AOP功能,方便進行面向切面的程式設計,許多不容易用傳統OOP實現的功能可以通過AOP輕鬆應付。

  ③、宣告式事務的支援

  在Spring中,我們可以從單調煩悶的事務管理程式碼中解脫出來,通過宣告式方式靈活地進行事務的管理,提高開發效率和質量。

  ④、方便程式的測試

  可以用非容器依賴的程式設計方式進行幾乎所有的測試工作,在Spring裡,測試不再是昂貴的操作,而是隨手可做的事情。例如:Spring對Junit4支援,可以通過註解方便的測試Spring程式。

  ⑤、方便整合各種優秀框架

  Spring不排斥各種優秀的開源框架,相反,Spring可以降低各種框架的使用難度,Spring提供了對各種優秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支援。

  ⑥、降低Java EE API的使用難度

  Spring對很多難用的Java EE API(如JDBC,JavaMail,遠端呼叫等)提供了一個薄薄的封裝層,通過Spring的簡易封裝,這些Java EE API的使用難度大為降低。

  ⑦、Java 原始碼是經典學習範例

  Spring的原始碼設計精妙、結構清晰、匠心獨運,處處體現著大師對Java設計模式靈活運用以及對Java技術的高深造詣。Spring框架原始碼無疑是Java技術的最佳實踐範例。如果想在短時間內迅速提高自己的Java技術水平和應用開發水平,學習和研究Spring原始碼將會使你收到意想不到的效果。

4、Spring 框架結構

  

 

   1、核心容器:核心容器提供 Spring 框架的基本功能(Spring Core)。核心容器的主要元件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉(IOC) 模式將應用程式的配置和依賴性規範與實際的應用程式程式碼分開。

  2、Spring 上下文:Spring 上下文是一個配置檔案,向 Spring框架提供上下文資訊。Spring 上下文包括企業服務,例如JNDI、EJB、電子郵件、國際化、校驗和排程功能。

  3、Spring AOP:通過配置管理特性,Spring AOP 模組直接將面向切面的程式設計功能整合到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何物件支援AOP。Spring AOP 模組為基於 Spring 的應用程式中的物件提供了事務管理服務。通過使用 Spring AOP,不用依賴 EJB 元件,就可以將宣告性事務管理整合到應用程式中。

  4、Spring DAO:JDBCDAO抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同資料庫供應商丟擲的錯誤訊息。異常層次結構簡化了錯誤處理,並且極大地降低了需要編寫的異常程式碼數量(例如開啟和關閉連線)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結構。

  5、Spring ORM:Spring 框架插入了若干個ORM框架,從而提供了 ORM 的物件關係工具,其中包括JDO、Hibernate和iBatisSQL Map。所有這些都遵從 Spring 的通用事務和 DAO 異常層次結構。

  6、Spring Web 模組:Web 上下文模組建立在應用程式上下文模組之上,為基於 Web 的應用程式提供了上下文。所以,Spring框架支援與 Jakarta Struts 的整合。Web 模組還簡化了處理多部分請求以及將請求引數繫結到域物件的工作。

  7、Spring MVC 框架:MVC框架是一個全功能的構建 Web應用程式的 MVC 實現。通過策略介面,MVC框架變成為高度可配置的,MVC 容納了大量檢視技術,其中包括 JSP、Velocity、Tiles、iText 和 POI。模型由javabean構成,存放於Map;檢視是一個介面,負責顯示模型;控制器表示邏輯程式碼,是Controller的實現。Spring框架的功能可以用在任何J2EE伺服器中,大多數功能也適用於不受管理的環境。Spring 的核心要點是:支援不繫結到特定 J2EE服務的可重用業務和資料訪問物件。毫無疑問,這樣的物件可以在不同J2EE 環境(Web 或EJB)、獨立應用程式、測試環境之間重用。

 

5、Spring 框架特徵 

  輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小隻有1MB多的JAR檔案裡釋出。並且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應用中的物件不依賴於Spring的特定類。

  控制反轉——Spring通過一種稱作控制反轉(IoC)的技術促進了低耦合。當應用了IoC,一個物件依賴的其它物件會通過被動的方式傳遞進來,而不是這個物件自己建立或者查詢依賴物件。你可以認為IoC與JNDI相反——不是物件從容器中查詢依賴,而是容器在物件初始化時不等物件請求就主動將依賴傳遞給它。

  面向切面——Spring提供了面向切面程式設計的豐富支援,允許通過分離應用的業務邏輯與系統級服務(例如審計(auditing)和事務(transaction)管理)進行內聚性的開發。應用物件只實現它們應該做的——完成業務邏輯——僅此而已。它們並不負責(甚至是意識)其它的系統級關注點,例如日誌或事務支援。

  容器——Spring包含並管理應用物件的配置和生命週期,在這個意義上它是一種容器,你可以配置你的每個bean如何被建立——基於一個可配置原型(prototype),你的bean可以建立一個單獨的例項或者每次需要時都生成一個新的例項——以及它們是如何相互關聯的。然而,Spring不應該被混同於傳統的重量級的EJB容器,它們經常是龐大與笨重的,難以使用。

  框架——Spring可以將簡單的元件配置、組合成為複雜的應用。在Spring中,應用物件被宣告式地組合,典型地是在一個XML檔案裡。Spring也提供了很多基礎功能(事務管理、持久化框架整合等等),將應用邏輯的開發留給了你。

  MVC——Spring的作用是整合,但不僅僅限於整合,Spring 框架可以被看做是一個企業解決方案級別的框架。客戶端傳送請求,伺服器控制器(由DispatcherServlet實現的)完成請求的轉發,控制器呼叫一個用於對映的類HandlerMapping,該類用於將請求對映到對應的處理器來處理請求。HandlerMapping 將請求對映到對應的處理器Controller(相當於Action)在Spring 當中如果寫一些處理器元件,一般實現Controller 介面,在Controller 中就可以呼叫一些Service 或DAO 來進行資料操作 ModelAndView 用於存放從DAO 中取出的資料,還可以存放響應檢視的一些資料。 如果想將處理結果返回給使用者,那麼在Spring 框架中還提供一個檢視元件ViewResolver,該元件根據Controller 返回的標示,找到對應的檢視,將響應response 返回給使用者。(典型例子是 SpringMVC 的實現,可以參考 SpringMVC詳解

 

6、Spring 優點

  Spring能有效地組織你的中間層物件,無論你是否選擇使用了EJB。如果你僅僅使用了Struts或其他的包含了J2EE特有APIs的framework,你會發現Spring關注了遺留下的問題。Spring能消除在許多工程上對Singleton的過多使用。根據我的經驗,這是一個主要的問題,它減少了系統的可測試性和麵向物件特性。

  Spring能消除使用各種各樣格式的屬性定製檔案的需要,在整個應用和工程中,可通過一種一致的方法來進行配置。曾經感到迷惑,一個特定類要查詢迷幻般的屬性關鍵字或系統屬性,為此不得不讀Javadoc乃至源編碼嗎?有了Spring,你可很簡單地看到類的JavaBean屬性。

  Spring能通過介面而不是類促進好的程式設計習慣,減少程式設計代價到幾乎為零。

  Spring被設計為讓使用它建立的應用盡可能少的依賴於他的APIs。在Spring應用中的大多數業務物件沒有依賴於Spring。所以使用Spring構建的應用程式易於單元測試。

  Spring能使EJB的使用成為一個實現選擇,而不是應用架構的必然選擇。你能選擇用POJOs或local EJBs來實現業務介面,卻不會影響呼叫程式碼。

  Spring幫助你解決許多問題而無需使用EJB。Spring能提供一種EJB的替換物,它們適於許多web應用。例如,Spring能使用AOP提供宣告性事務而不通過使用EJB容器,如果你僅僅需要與單個的資料庫打交道,甚至不需要JTA實現。

  Spring為資料存取提供了一致的框架,不論是使用JDBC或O/R mapping產品(如Hibernate)。

  總結:

  1.低侵入式設計,程式碼汙染極低

  2.獨立於各種應用伺服器,基於Spring框架的應用,可以真正實現Write Once,Run Anywhere的承諾

  3.Spring的DI機制降低了業務物件替換的複雜性,提高了元件之間的解耦

  4.Spring的AOP支援允許將一些通用任務如安全、事務、日誌等進行集中式管理,從而提供了更好的複用

  5.Spring的ORM和DAO提供了與第三方持久層框架的良好整合,並簡化了底層的資料庫訪問

  6.Spring並不強制應用完全依賴於Spring,開發者可自由選用Spring框架的部分或全部