spring框架 - Java開源框架
Spring框架是由于軟件開發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用的是基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅僅限于服務(wù)器端的開發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合性的角度而言,絕大部分Java應(yīng)用都可以從Spring中受益?!裟康模航鉀Q企業(yè)應(yīng)用開發(fā)的復(fù)雜性◆功能:使用基本的JavaBean代替EJB,并提供了更多的企業(yè)應(yīng)用功能◆范圍:任何Java應(yīng)用Spring是一個(gè)輕量級(jí)控制反轉(zhuǎn) - IoC和面向切面 - AOP的容器框架。

定義簡(jiǎn)介
是基于Java語言的極速web開發(fā)框架,其核心設(shè)計(jì)目標(biāo)是開發(fā)迅速、代碼量少、易擴(kuò)展等;Spring框架是由于軟件開發(fā)的復(fù)雜性而創(chuàng)建的,其用途不僅僅限于服務(wù)器端的開發(fā)。
Spring是一個(gè)開源框架,它由RodJohnson創(chuàng)建。這是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用的是基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅僅限于服務(wù)器端的開發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合性的角度而言,任何Java應(yīng)用都可以從Spring中受益。
◆目的:解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性
◆功能:使用基本的JavaBean代替EJB,并提供了更多的企業(yè)應(yīng)用功能
◆范圍:任何Java應(yīng)用
Spring是一個(gè)輕量級(jí)控制反轉(zhuǎn) - IoC和面向切面 - AOP的容器框架。
起源要談Spring的歷史,就要先談J2EE。J2EE應(yīng)用程序的廣泛實(shí)現(xiàn)是在1999年和2000年開始的,它的出現(xiàn)帶來了諸如事務(wù)管理之類的核心中間層概念的標(biāo)準(zhǔn)化,但是在實(shí)踐中并沒有獲得絕對(duì)的成功,因?yàn)殚_發(fā)效率,開發(fā)難度和實(shí)際的性能都令人失望。
曾經(jīng)使用過EJB開發(fā)J2EE應(yīng)用的人,一定知道,在EJB開始的學(xué)習(xí)和應(yīng)用非常的艱苦,很多東西都不能一下子就很容易的理解。EJB要嚴(yán)格地繼承各種不同類型的接口,類似的或者重復(fù)的代碼大量存在。而配置也是復(fù)雜和單調(diào),同樣使用JNDI進(jìn)行對(duì)象查找的代碼也是單調(diào)而枯燥。雖然有一些開發(fā)工作隨著xdoclet的出現(xiàn),而有所緩解,但是學(xué)習(xí)EJB的高昂代價(jià),和極低的開發(fā)效率,極高的資源消耗,都造成了EJB的使用困難。而Spring出現(xiàn)的初衷就是為了解決類似的這些問題。
Spring的一個(gè)最大的目的就是使J2EE開發(fā)更加容易。同時(shí),Spring之所以與Struts、Hibernate等單層框架不同,是因?yàn)镾pring致力于提供一個(gè)以統(tǒng)一的、高效的方式構(gòu)造整個(gè)應(yīng)用,并且可以將單層框架以最佳的組合揉和在一起建立一個(gè)連貫的體系??梢哉fSpring是一個(gè)提供了更完善開發(fā)環(huán)境的一個(gè)框架,可以為POJO - Plain Old Java Object對(duì)象提供企業(yè)級(jí)的服務(wù)。
Spring的形成,最初來自Rod Jahnson所著的一本很有影響力的書籍《Expert One-on-One J2EE Design and Development》,就是在這本書中第一次出現(xiàn)了Spring的一些核心思想,該書出版于2002年。另外一本書《Expert One-on-One J2EE Development without EJB》,更進(jìn)一步闡述了在不使用EJB開發(fā)J2EE企業(yè)級(jí)應(yīng)用的一些設(shè)計(jì)思想和具體的做法。有時(shí)間了可以詳細(xì)的研讀一下。
獨(dú)特優(yōu)點(diǎn)
◆J2EE應(yīng)該更加容易使用。
◆面向?qū)ο蟮脑O(shè)計(jì)比任何實(shí)現(xiàn)技術(shù)(比如J2EE)都重要。
◆面向接口編程,而不是針對(duì)類編程。Spring將使用接口的復(fù)雜度降低到零。(面向接口編程有哪些復(fù)雜度?)
◆代碼應(yīng)該易于測(cè)試。Spring框架會(huì)幫助你,使代碼的測(cè)試更加簡(jiǎn)單。
◆JavaBean提供了應(yīng)用程序配置的最好方法。
◆在Java中,已檢查異常(Checked exception)被過度使用??蚣懿粦?yīng)該迫使你捕獲不能恢復(fù)的異常。
模塊
Spring框架由七個(gè)定義明確的模塊組成(圖1.1)。
(Spring框架概覽圖1.1)
如果作為一個(gè)整體,這些模塊為你提供了開發(fā)企業(yè)應(yīng)用所需的一切。但你不必將應(yīng)用完全基于Spring框架。你可以自由地挑選適合你的應(yīng)用的模塊而忽略其余的模塊。
就像你所看到的,所有的Spring模塊都是在核心容器之上構(gòu)建的。容器定義了Bean是如何創(chuàng)建、配置和管理的——更多的Spring細(xì)節(jié)。當(dāng)你配置你的應(yīng)用時(shí),你會(huì)潛在地使用這些類。但是作為一名開發(fā)者,你最可能對(duì)影響容器所提供的服務(wù)的其它模塊感興趣。這些模塊將會(huì)為你提供用于構(gòu)建應(yīng)用服務(wù)的框架,例如AOP和持久性。
核心容器
這是Spring框架最基礎(chǔ)的部分,它提供了依賴注入(DependencyInjection)特征來實(shí)現(xiàn)容器對(duì)Bean的管理。這里最基本的概念是BeanFactory,它是任何Spring應(yīng)用的核心。BeanFactory是工廠模式的一個(gè)實(shí)現(xiàn),它使用IoC將應(yīng)用配置和依賴說明從實(shí)際的應(yīng)用代碼中分離出來。
應(yīng)用上下文(Context)模塊
核心模塊的BeanFactory使Spring成為一個(gè)容器,而上下文模塊使它成為一個(gè)框架。這個(gè)模塊擴(kuò)展了BeanFactory的概念,增加了對(duì)國(guó)際化(I18N)消息、事件傳播以及驗(yàn)證的支持。
另外,這個(gè)模塊提供了許多企業(yè)服務(wù),例如電子郵件、JNDI訪問、EJB集成、遠(yuǎn)程以及時(shí)序調(diào)度(scheduling)服務(wù)。也包括了對(duì)模版框架例如Velocity和FreeMarker集成的支持。
Spring的AOP模塊
Spring在它的AOP模塊中提供了對(duì)面向切面編程的豐富支持。這個(gè)模塊是在Spring應(yīng)用中實(shí)現(xiàn)切面編程的基礎(chǔ)。為了確保Spring與其它AOP框架的互用性,Spring的AOP支持基于AOP聯(lián)盟定義的API。AOP聯(lián)盟是一個(gè)開源項(xiàng)目,它的目標(biāo)是通過定義一組共同的接口和組件來促進(jìn)AOP的使用以及不同的AOP實(shí)現(xiàn)之間的互用性。通過訪問他們的站點(diǎn),你可以找到關(guān)于AOP聯(lián)盟的更多內(nèi)容。
Spring的AOP模塊也將元數(shù)據(jù)編程引入了Spring。使用Spring的元數(shù)據(jù)支持,你可以為你的源代碼增加注釋,指示Spring在何處以及如何應(yīng)用切面函數(shù)。
JDBC抽象和DAO模塊
使用JDBC經(jīng)常導(dǎo)致大量的重復(fù)代碼,取得連接、創(chuàng)建語句、處理結(jié)果集,然后關(guān)閉連接。Spring的JDBC和DAO模塊抽取了這些重復(fù)代碼,因此你可以保持你的數(shù)據(jù)庫訪問代碼干凈簡(jiǎn)潔,并且可以防止因關(guān)閉數(shù)據(jù)庫資源失敗而引起的問題。
這個(gè)模塊還在幾種數(shù)據(jù)庫服務(wù)器給出的錯(cuò)誤消息之上建立了一個(gè)有意義的異常層。使你不用再試圖破譯神秘的私有的SQL錯(cuò)誤消息!
另外,這個(gè)模塊還使用了Spring的AOP模塊為Spring應(yīng)用中的對(duì)象提供了事務(wù)管理服務(wù)。
對(duì)象/關(guān)系映射集成模塊
對(duì)那些更喜歡使用對(duì)象/關(guān)系映射工具而不是直接使用JDBC的人,Spring提供了ORM模塊。Spring并不試圖實(shí)現(xiàn)它自己的ORM解決方案,而是為幾種流行的ORM框架提供了集成方案,包括Hibernate、JDO和iBATIS SQL映射。Spring的事務(wù)管理支持這些ORM框架中的每一個(gè)也包括JDBC。
Spring的Web模塊
Web上下文模塊建立于應(yīng)用上下文模塊之上,提供了一個(gè)適合于Web應(yīng)用的上下文。另外,這個(gè)模塊還提供了一些面向服務(wù)支持。例如:實(shí)現(xiàn)文件上傳的multipart請(qǐng)求,它也提供了Spring和其它Web框架的集成,比如Struts、WebWork。
Spring的MVC框架
Spring為構(gòu)建Web應(yīng)用提供了一個(gè)功能全面的MVC框架。雖然Spring可以很容易地與其它MVC框架集成,例如Struts,但Spring的MVC框架使用IoC對(duì)控制邏輯和業(yè)務(wù)對(duì)象提供了完全的分離。
它也允許你聲明性地將請(qǐng)求參數(shù)綁定到你的業(yè)務(wù)對(duì)象中,此外,Spring的MVC框架還可以利用Spring的任何其它服務(wù),例如國(guó)際化信息與驗(yàn)證。
Spring框架Web頁面亂碼問題
在做java Web 項(xiàng)目時(shí),亂碼問題時(shí)常都會(huì)出現(xiàn),解決方法也不盡相同,有簡(jiǎn)單也有復(fù)雜的;如果加入了Spring框架之后就不一樣了,可以采用Spring框架自帶的過濾器CharacterEncodingFilter,這樣可以大大減輕了我們的工作量,即簡(jiǎn)單方便又容易理解,配置方式如下:在web.xml文件中filter的位置加上如下內(nèi)容:
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
true
encodingFilter
*
