目錄
本系列教程我們將對 Spring 進行詳解的介紹绩郎,相信你在看完后一定能夠有所收獲潘鲫。
1、什么是 Spring ?
Spring是一個開源框架肋杖,Spring是于2003 年興起的一個輕量級的Java 開發(fā)框架溉仑,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來。它是為了解決企業(yè)應用開發(fā)的復雜性而創(chuàng)建的兽愤。框架的主要優(yōu)勢之一就是其分層架構挪圾,分層架構允許使用者選擇使用哪一個組件浅萧,同時為 J2EE 應用程序開發(fā)提供集成的框架。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情哲思。然而洼畅,Spring的用途不僅限于服務器端的開發(fā)。從簡單性棚赔、可測試性和松耦合的角度而言帝簇,任何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傳統開發(fā)的困境,從實際需求出發(fā)竖伯,著眼于輕便存哲、靈巧,易于開發(fā)七婴、測試和部署的輕量級開發(fā)框架宏胯。Spring框架即以interface21框架為基礎,經過重新設計本姥,并不斷豐富其內涵肩袍,于2004年3月24日,發(fā)布了1.0正式版婚惫。同年他又推出了一部堪稱經典的力作《Expert one-on-one J2EE Development without EJB》氛赐,該書在Java世界掀起了軒然大波魂爪,不斷改變著Java開發(fā)者程序設計和開發(fā)的思考方式。在該書中艰管,作者根據自己多年豐富的實踐經驗滓侍,對EJB的各種笨重臃腫的結構進行了逐一的分析和否定,并分別以簡潔實用的方式替換之牲芋。至此一戰(zhàn)功成撩笆,Rod Johnson成為一個改變Java世界的大師級人物。
3缸浦、Spring 特點
①夕冲、方便解耦,簡化開發(fā)
通過Spring提供的IoC容器裂逐,我們可以將對象之間的依賴關系交由Spring進行控制歹鱼,避免硬編碼所造成的過度程序耦合。有了Spring卜高,用戶不必再為單實例模式類弥姻、屬性文件解析等這些很底層的需求編寫代碼,可以更專注于上層的應用掺涛。
②庭敦、AOP編程的支持
通過Spring提供的AOP功能,方便進行面向切面的編程薪缆,許多不容易用傳統OOP實現的功能可以通過AOP輕松應付螺捐。
③、聲明式事務的支持
在Spring中矮燎,我們可以從單調煩悶的事務管理代碼中解脫出來定血,通過聲明式方式靈活地進行事務的管理,提高開發(fā)效率和質量诞外。
④澜沟、方便程序的測試
可以用非容器依賴的編程方式進行幾乎所有的測試工作,在Spring里峡谊,測試不再是昂貴的操作茫虽,而是隨手可做的事情。例如:Spring對Junit4支持既们,可以通過注解方便的測試Spring程序濒析。
⑤、方便集成各種優(yōu)秀框架
Spring不排斥各種優(yōu)秀的開源框架啥纸,相反号杏,Spring可以降低各種框架的使用難度,Spring提供了對各種優(yōu)秀框架(如Struts,Hibernate斯棒、Hessian盾致、Quartz)等的直接支持主经。
⑥、降低Java EE API的使用難度
Spring對很多難用的Java EE API(如JDBC庭惜,JavaMail罩驻,遠程調用等)提供了一個薄薄的封裝層,通過Spring的簡易封裝护赊,這些Java EE API的使用難度大為降低惠遏。
⑦、Java 源碼是經典學習范例
Spring的源碼設計精妙骏啰、結構清晰节吮、匠心獨運,處處體現著大師對Java設計模式靈活運用以及對Java技術的高深造詣器一。Spring框架源碼無疑是Java技術的最佳實踐范例课锌。如果想在短時間內迅速提高自己的Java技術水平和應用開發(fā)水平厨内,學習和研究Spring源碼將會使你收到意想不到的效果祈秕。
4、Spring 框架結構
? 1雏胃、核心容器:核心容器提供 Spring 框架的基本功能(Spring Core)请毛。核心容器的主要組件是 BeanFactory,它是工廠模式的實現瞭亮。BeanFactory 使用控制反轉(IOC) 模式將應用程序的配置和依賴性規(guī)范與實際的應用程序代碼分開方仿。
2、Spring 上下文:Spring 上下文是一個配置文件统翩,向 Spring框架提供上下文信息仙蚜。Spring 上下文包括企業(yè)服務,例如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服務器中柒傻,大多數功能也適用于不受管理的環(huán)境。Spring 的核心要點是:支持不綁定到特定 J2EE服務的可重用業(yè)務和數據訪問對象较木。毫無疑問红符,這樣的對象可以在不同J2EE 環(huán)境(Web 或EJB)、獨立應用程序、測試環(huán)境之間重用预侯。
5致开、Spring 框架特征?
輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小只有1MB多的JAR文件里發(fā)布萎馅。并且Spring所需的處理開銷也是微不足道的双戳。此外,Spring是非侵入式的:典型地糜芳,Spring應用中的對象不依賴于Spring的特定類飒货。
控制反轉——Spring通過一種稱作控制反轉(IoC)的技術促進了低耦合。當應用了IoC峭竣,一個對象依賴的其它對象會通過被動的方式傳遞進來塘辅,而不是這個對象自己創(chuàng)建或者查找依賴對象。你可以認為IoC與JNDI相反——不是對象從容器中查找依賴皆撩,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它扣墩。
面向切面——Spring提供了面向切面編程的豐富支持,允許通過分離應用的業(yè)務邏輯與系統級服務(例如審計(auditing)和事務(transaction)管理)進行內聚性的開發(fā)扛吞。應用對象只實現它們應該做的——完成業(yè)務邏輯——僅此而已呻惕。它們并不負責(甚至是意識)其它的系統級關注點,例如日志或事務支持喻粹。
容器——Spring包含并管理應用對象的配置和生命周期蟆融,在這個意義上它是一種容器草巡,你可以配置你的每個bean如何被創(chuàng)建——基于一個可配置原型(prototype)守呜,你的bean可以創(chuàng)建一個單獨的實例或者每次需要時都生成一個新的實例——以及它們是如何相互關聯的。然而山憨,Spring不應該被混同于傳統的重量級的EJB容器查乒,它們經常是龐大與笨重的,難以使用郁竟。
框架——Spring可以將簡單的組件配置玛迄、組合成為復雜的應用。在Spring中棚亩,應用對象被聲明式地組合蓖议,典型地是在一個XML文件里。Spring也提供了很多基礎功能(事務管理讥蟆、持久化框架集成等等)勒虾,將應用邏輯的開發(fā)留給了你。
MVC——Spring的作用是整合瘸彤,但不僅僅限于整合修然,Spring 框架可以被看做是一個企業(yè)解決方案級別的框架。客戶端發(fā)送請求愕宋,服務器控制器(由DispatcherServlet實現的)完成請求的轉發(fā)玻靡,控制器調用一個用于映射的類HandlerMapping,該類用于將請求映射到對應的處理器來處理請求中贝。HandlerMapping 將請求映射到對應的處理器Controller(相當于Action)在Spring 當中如果寫一些處理器組件囤捻,一般實現Controller 接口,在Controller 中就可以調用一些Service 或DAO 來進行數據操作 ModelAndView 用于存放從DAO 中取出的數據邻寿,還可以存放響應視圖的一些數據最蕾。 如果想將處理結果返回給用戶,那么在Spring 框架中還提供一個視圖組件ViewResolver老厌,該組件根據Controller 返回的標示瘟则,找到對應的視圖,將響應response 返回給用戶枝秤。(典型例子是 SpringMVC 的實現醋拧,可以參考SpringMVC詳解)
6、Spring 優(yōu)點
Spring能有效地組織你的中間層對象淀弹,無論你是否選擇使用了EJB丹壕。如果你僅僅使用了Struts或其他的包含了J2EE特有APIs的framework,你會發(fā)現Spring關注了遺留下的問題薇溃。Spring能消除在許多工程上對Singleton的過多使用菌赖。根據我的經驗,這是一個主要的問題沐序,它減少了系統的可測試性和面向對象特性琉用。
Spring能消除使用各種各樣格式的屬性定制文件的需要,在整個應用和工程中策幼,可通過一種一致的方法來進行配置邑时。曾經感到迷惑,一個特定類要查找迷幻般的屬性關鍵字或系統屬性特姐,為此不得不讀Javadoc乃至源編碼嗎晶丘?有了Spring,你可很簡單地看到類的JavaBean屬性。
Spring能通過接口而不是類促進好的編程習慣,減少編程代價到幾乎為零暴浦。
Spring被設計為讓使用它創(chuàng)建的應用盡可能少的依賴于他的APIs。在Spring應用中的大多數業(yè)務對象沒有依賴于Spring滚秩。所以使用Spring構建的應用程序易于單元測試。
Spring能使EJB的使用成為一個實現選擇铜靶,而不是應用架構的必然選擇叔遂。你能選擇用POJOs或local EJBs來實現業(yè)務接口他炊,卻不會影響調用代碼。
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機制降低了業(yè)務對象替換的復雜性誊稚,提高了組件之間的解耦
4.Spring的AOP支持允許將一些通用任務如安全翔始、事務、日志等進行集中式管理里伯,從而提供了更好的復用
5.Spring的ORM和DAO提供了與第三方持久層框架的良好整合城瞎,并簡化了底層的數據庫訪問
6.Spring并不強制應用完全依賴于Spring,開發(fā)者可自由選用Spring框架的部分或全部
轉發(fā)自 Spring詳情??? ??