spring框架

spring框架

Spring框架是由於軟體開發的複雜性而創建的。Spring使用的是基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅僅限於伺服器端的開發。從簡單性、可測試性和松耦合性角度而言,絕大部分Java套用都可以從Spring中受益。 ◆目的:解決企業套用開發的複雜性 ◆功能:使用基本的JavaBean代替EJB,並提供了更多的企業套用功能 ◆範圍:任何Java套用 Spring是一個輕量級控制反轉(IoC)和面向切面(AOP)的容器框架。

基本信息

起源

要談Spring的歷史,就要先談J2EE。J2EE應用程式的廣泛實現是在1999年和2000年開始的,它的出現帶來了諸如事務管理之類的核心中間層概念的標準化,但是在實踐中並沒有獲得絕對的成功,因為開發效率,開發難度和實際的性能都令人失望。

曾經使用過EJB開發JAVA EE套用的人,一定知道,在EJB開始的學習和套用非常的艱苦,很多東西都不能一下子就很容易的理解。EJB要嚴格地實現各種不同類型的接口,類似的或者重複的代碼大量存在。而配置也是複雜和單調,同樣使用JNDI進行對象查找的代碼也是單調而枯燥。雖然有一些開發工作隨著xdoclet的出現,而有所緩解,但是學習EJB的高昂代價,和極低的開發效率,極高的資源消耗,都造成了EJB的使用困難。而Spring出現的初衷就是為了解決類似的這些問題。

Spring的一個最大的目的就是使JAVA EE開發更加容易。同時,Spring之所以與Struts、Hibernate等單層框架不同,是因為Spring致力於提供一個以統一的、高效的方式構造整個套用,並且可以將單層框架以最佳的組合揉和在一起建立一個連貫的體系。可以說Spring是一個提供了更完善開發環境的一個框架,可以為POJO(Plain Ordinary Java Object)對象提供企業級的服務。

Spring的形成,最初來自Rod Jahnson所著的一本很有影響力的書籍《Expert One-on-One J2EE Design and Development》,就是在這本書中第一次出現了Spring的一些核心思想,該書出版於2002年。另外一本書《Expert One-on-One J2EE Development without EJB》,更進一步闡述了在不使用EJB開發JAVA EE企業級套用的一些設計思想和具體的做法。有時間了可以詳細的研讀一下。

Spring的初衷:

1、JAVA EE開始應該更加簡單。

2、使用接口而不是使用類,是更好的編程習慣。Spring將使用接口的複雜度幾乎降低到了零。

3、為JavaBean提供了一個更好的套用配置框架。

4、更多地強調面向對象的設計,而不是現行的技術如JAVA EE。

5、儘量減少不必要的異常捕捉。

6、使應用程式更加容易測試。

Spring的目標:

1、可以令人方便愉快的使用Spring。

2、應用程式代碼並不依賴於Spring APIs。

3、Spring不和現有的解決方案競爭,而是致力於將它們融合在一起。

Spring的基本組成:

1、最完善的輕量級核心框架。

2、通用的事務管理抽象層。

3、JDBC抽象層。

4、集成了Toplink, Hibernate, JDO, and iBATIS SQL Maps。

5、AOP功能。

6、靈活的MVC Web套用框架。

優點

◆JAVA EE應該更加容易使用。

◆面向對象的設計比任何實現技術(比如JAVA EE)都重要。

◆面向接口編程,而不是針對類編程。Spring將使用接口的複雜度降低到零。(面向接口編程有哪些複雜度?)

◆代碼應該易於測試。Spring框架會幫助你,使代碼的測試更加簡單。

◆JavaBean提供了應用程式配置的最好方法。

◆在Java中,已檢查異常(Checked exception)被過度使用。框架不應該迫使你捕獲不能恢復的異常。

簡介

Spring:

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

Spring是一個輕量級的控制反轉(IoC)和面向切面(AOP)的容器框架。

輕量——從大小與開銷兩方面而言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也提供了很多基礎功能(事務管理、持久化框架集成等等),將套用邏輯的開發留給了你。

所有Spring的這些特徵使你能夠編寫更乾淨、更可管理、並且更易於測試的代碼。它們也為Spring中的各種模組提供了基礎支持。

模組

Spring框架由七個定義明確的模組組成(圖1.1)。

Spring框架圖 Spring框架圖

(Spring框架概覽圖1.1)

如果作為一個整體,這些模組為你提供了開發企業套用所需的一切。但你不必將套用完全基於Spring框架。你可以自由地挑選適合你的套用的模組而忽略其餘的模組。

就像你所看到的,所有的Spring模組都是在核心容器之上構建的。容器定義了Bean是如何創建、配置和管理的——更多的Spring細節。當你配置你的套用時,你會潛在地使用這些類。但是作為一名開發者,你最可能對影響容器所提供的服務的其它模組感興趣。這些模組將會為你提供用於構建套用服務的框架,例如AOP和持久性。

核心容器

這是Spring框架最基礎的部分,它提供了依賴注入(DependencyInjection)特徵來實現容器對Bean的管理。這裡最基本的概念是BeanFactory,它是任何Spring套用的核心。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實現之間的互用性。通過訪問他們的站點,你可以找到關於AOP聯盟的更多內容。

Spring的AOP模組也將元數據編程引入了Spring。使用Spring的元數據支持,你可以為你的原始碼增加注釋,指示Spring在何處以及如何套用切面函式。

JDBC抽象和DAO模組

使用JDBC經常導致大量的重複代碼,取得連線、創建語句、處理結果集,然後關閉連線。Spring的JDBC和DAO模組抽取了這些重複代碼,因此你可以保持你的資料庫訪問代碼乾淨簡潔,並且可以防止因關閉資料庫資源失敗而引起的問題。

這個模組還在幾種資料庫伺服器給出的錯誤訊息之上建立了一個有意義的異常層。使你不用再試圖破譯神秘的私有的SQL錯誤訊息!

另外,這個模組還使用了Spring的AOP模組為Spring套用中的對象提供了事務管理服務。

對象/關係映射集成模組

對那些更喜歡使用對象/關係映射工具而不是直接使用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的MVC框架還可以利用Spring的任何其它服務,例如國際化信息與驗證。

Spring框架Web頁面亂碼問題

在做java Web 項目時,亂碼問題時常都會出現,解決方法也不盡相同,有簡單也有複雜的;如果加入了Spring框架之後就不一樣了,可以採用Spring框架自帶的過濾器CharacterEncodingFilter,這樣可以大大減輕了我們的工作量,即簡單方便又容易理解,配置方式如下:在web.xml檔案中filter的位置加上如下內容:

總結

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

相關詞條

相關搜尋

熱門詞條

聯絡我們