Spring是一個(gè)開源框架,Spring是于2003 年興起的一個(gè)輕量級的Java 開發(fā)框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來。它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限于服務(wù)器端的開發(fā)。從簡單性、可測試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。
二、Spring核心◆目的:解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性◆功能:使用基本的JavaBean代替EJB,并提供了更多的企業(yè)應(yīng)用功能◆范圍:任何Java應(yīng)用簡單來說,Spring是一個(gè)輕量級的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。◆輕量――從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個(gè)大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應(yīng)用中的對象不依賴于Spring的特定類。◆控制反轉(zhuǎn)――Spring通過一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用了IoC,一個(gè)對象依賴的其它對象會通過被動的方式傳遞進(jìn)來,而不是這個(gè)對象自己創(chuàng)建或者查找依賴對象。你可以認(rèn)為IoC與JNDI相反――不是對象從容器中查找依賴,而是容器在對象初始化時(shí)不等對象請求就主動將依賴傳遞給它。◆面向切面――Spring提供了面向切面編程的豐富支持,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級服務(wù)(例如審計(jì)(auditing)和事務(wù)(transaction)管理)進(jìn)行內(nèi)聚性的開發(fā)。應(yīng)用對象只實(shí)現(xiàn)它們應(yīng)該做的――完成業(yè)務(wù)邏輯――僅此而已。它們并不負(fù)責(zé)(甚至是意識)其它的系統(tǒng)級關(guān)注點(diǎn),例如日志或事務(wù)支持。◆容器――Spring包含并管理應(yīng)用對象的配置和生命周期,在這個(gè)意義上它是一種容器,你可以配置你的每個(gè)bean如何被創(chuàng)建――基于一個(gè)可配置原型(prototype),你的bean可以創(chuàng)建一個(gè)單獨(dú)的實(shí)例或者每次需要時(shí)都生成一個(gè)新的實(shí)例――以及它們是如何相互關(guān)聯(lián)的。然而,Spring不應(yīng)該被混同于傳統(tǒng)的重量級的EJB容器,它們經(jīng)常是龐大與笨重的,難以使用。◆框架――Spring可以將簡單的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)用對象被聲明式地組合,典型地是在一個(gè)XML文件里。Spring也提供了很多基礎(chǔ)功能(事務(wù)管理、持久化框架集成等等),將應(yīng)用邏輯的開發(fā)留給了你。◆MVC――Spring的作用是整合,但不僅僅限于整合,Spring 框架可以被看做是一個(gè)企業(yè)解決方案級別的框架。客戶端發(fā)送請求,服務(wù)器控制器(由DispatcherServlet實(shí)現(xiàn)的)完成請求的轉(zhuǎn)發(fā),控制器調(diào)用一個(gè)用于映射的類HandlerMapping,該類用于將請求映射到對應(yīng)的處理器來處理請求。HandlerMapping 將請求映射到對應(yīng)的處理器Controller(相當(dāng)于Action)在Spring 當(dāng)中如果寫一些處理器組件,一般實(shí)現(xiàn)Controller 接口,在Controller 中就可以調(diào)用一些Service 或DAO 來進(jìn)行數(shù)據(jù)操作 ModelAndView 用于存放從DAO 中取出的數(shù)據(jù),還可以存放響應(yīng)視圖的一些數(shù)據(jù)。 如果想將處理結(jié)果返回給用戶,那么在Spring 框架中還提供一個(gè)視圖組件ViewResolver,該組件根據(jù)Controller 返回的標(biāo)示,找到對應(yīng)的視圖,將響應(yīng)response 返回給用戶。所有Spring的這些特征使你能夠編寫更干凈、更可管理、并且更易于測試的代碼。它們也為Spring中的各種模塊提供了基礎(chǔ)支持。
Spring一共有7個(gè)模塊組成如下圖:
這幾個(gè)模塊的功能包括:
Core包是框架的基本組成部分,它提供依賴注射及Bean容器的管理功能。它的BeanFactory消除了應(yīng)用對Singleton和Factory的依賴。
AOP包提供了與AOP聯(lián)盟兼容的AOP實(shí)現(xiàn),允許定義方法、攔截器、切入點(diǎn)等。通過AOP,在應(yīng)用程序邏輯上實(shí)現(xiàn)了關(guān)注點(diǎn)的橫切分離。
Context包構(gòu)建于Bean包之上,它提供了一種框架式的Bean訪問方式,類似JNDI機(jī)制,Context包提供了Bean包之上的功能擴(kuò)展。
DAO包提供了JDBC抽象,消除了冗長的JDBC編碼,并轉(zhuǎn)譯了數(shù)據(jù)庫廠商特有的錯(cuò)誤代碼。該包也提供了編程式和聲明式的事務(wù)管理。
ORM包為流行的關(guān)系/對象映射方案提供集成的借口。
WebMVC包提供了面向Web應(yīng)用的MVC實(shí)現(xiàn)Spring的MVC和Ioc容器的整合提供了較大的靈活性
Web包提供了面向Web的綜合特性,如使用Servlet監(jiān)聽器的Context初始化、文件上傳等功能。此外它也用于同其他Web框架的集成。
三、綜述。
Spring為我們訪問底層的J2EE容器服務(wù)更為簡單,有了Spring我們的開發(fā)效率將大大提高。