前言:(內附 spring 下載地址,能夠選擇須要的版本,給有須要的朋友)補充一下基礎知識,spring 的定義和 springmvc 的定義,來源於百度百科。java
spring 源碼下載地址
https://github.com/spring-projects/spring-framework/tagsgit
spring
定義
Spring是一個開放源代碼的設計層面框架,他解決的是業務邏輯層和其餘各層的鬆耦合問題,所以它將面向接口的編程思想貫穿整個系統應用。Spring是於2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson建立。程序員
簡單來講,Spring是一個分層的JavaSE/EE full-stack(一站式) 輕量級開源框架。 github
目的
解決企業應用開發的複雜性 web
框架特徵
輕量——從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架能夠在一個大小隻有1MB多的JAR文件裏發佈。而且Spring所需的處理開銷也是微不足道的。此外,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 返回給用戶。
全部Spring的這些特徵使你可以編寫更乾淨、更可管理、而且更易於測試的代碼。它們也爲Spring中的各類模塊提供了基礎支持。
特色
1.方便解耦,簡化開發
經過Spring提供的IoC容器,咱們能夠將對象之間的依賴關係交由Spring進行控制,避免硬編碼所形成的過分程序耦合。有了Spring,用戶沒必要再爲單實例模式類、屬性文件解析等這些很底層的需求編寫代碼,能夠更專一於上層的應用。
經過Spring提供的
AOP功能,方便進行面向切面的編程,許多不容易用傳統OOP實現的功能能夠經過AOP輕鬆應付。
在Spring中,咱們能夠從單調煩悶的事務管理代碼中解脫出來,經過聲明式方式靈活地進行事務的管理,提升開發效率和質量。
4.方便程序的測試
能夠用非容器依賴的編程方式進行幾乎全部的測試工做,在Spring裏,測試再也不是昂貴的操做,而是隨手可作的事情。例如:Spring對Junit4支持,能夠經過註解方便的測試Spring程序。
5.方便集成各類優秀框架
Spring不排斥各類優秀的開源框架,相反,Spring能夠下降各類框架的使用難度,Spring提供了對各類優秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。
6.下降Java EE API的使用難度
Spring對不少難用的Java EE API(如JDBC,JavaMail,遠程調用等)提供了一個薄薄的封裝層,經過Spring的簡易封裝,這些Java EE API的使用難度大爲下降。
7.Java 源碼是經典學習範例
Spring的源碼設計精妙、結構清晰、匠心獨運,到處體現着大師對
Java設計模式靈活運用以及對Java技術的高深造詣。Spring框架源碼無疑是Java技術的最佳實踐範例。若是想在短期內迅速提升本身的Java技術水平和應用開發水平,學習和研究Spring源碼將會使你收到意想不到的效果。
優勢
Spring能有效地組織你的中間層對象,不管你是否選擇使用了EJB。若是你僅僅使用了Struts或其餘的包含了J2EE特有API的framework,你會發現Spring關注了遺留下的問題。Spring能消除在許多工程上對Singleton的過多使用。根據個人經驗,這是一個主要的問題,它減小了系統的
可測試性和
面向對象特性。
Spring能消除使用各類各樣格式的屬性定製文件的須要,在整個應用和工程中,可經過一種一致的方法來進行配置。曾經感到迷惑,一個特定類要查找迷幻般的屬性關鍵字或系統屬性,爲此不得不讀Javadoc乃至源編碼嗎?有了Spring,你可很簡單地看到類的JavaBean屬性。倒置控制的使用(在下面討論)幫助完成這種簡化。
Spring能經過接口而不是類促進好的編程習慣,減小編程代價到幾乎爲零。
Spring被設計爲讓使用它建立的應用盡量少的依賴於他的APIs。在Spring應用中的大多數
業務對象沒有依賴於Spring。
Spring能使EJB的使用成爲一個實現選擇,而不是應用架構的必然選擇。你能選擇用POJOs或local EJBs來實現業務接口,卻不會影響調用代碼。
Spring幫助你解決許多問題而無需使用EJB。Spring能提供一種EJB的替換物,它們適於許多web應用。例如,Spring能使用AOP提供聲明性
事務而不經過使用EJB容器,若是你僅僅須要與單個的數據庫打交道,甚至不須要JTA實現。
Spring爲數據存取提供了一致的框架,不管是使用JDBC或O/R mapping產品(如Hibernate)。
Spring確實使你能經過最簡單可行的解決辦法解決你的問題。這些特性是有很大價值的。
總結起來,Spring有以下優勢:
1.低侵入式設計,代碼污染極低
2.獨立於各類
應用服務器,基於Spring框架的應用,能夠真正實現Write Once,Run Anywhere的承諾
3.Spring的DI機制下降了
業務對象替換的複雜性,提升了組件之間的解耦
4.Spring的AOP支持容許將一些通用任務如安全、事務、日誌等進行集中式管理,從而提供了更好的複用
5.Spring的ORM和DAO提供了與第三方持久層框架的良好整合,並簡化了底層的數據庫訪問
6.Spring並不強制應用徹底依賴於Spring,開發者可自由選用Spring框架的部分或所有
做用
Spring的主要目的是使JavaEE易用和促進好編程習慣。
Spring的目標是使已存在的技術更加易用。
Spring也得益於內在的一致性。
Spring在應用服務器之間是可移植的。
基本框架
組成Spring框架的每一個模塊(或組件)均可以單獨存在,或者與其餘一個或多個模塊聯合實現。每一個模塊的功能以下:
一、核心容器:核心容器提供 Spring 框架的基本功能(Spring Core)。核心容器的主要組件是 BeanFactory,它是
工廠模式的實現。BeanFactory 使用
控制反轉(IOC) 模式將應用程序的配置和依賴性規範與實際的應用程序代碼分開。
二、Spring 上下文:Spring 上下文是一個
配置文件,向 Spring框架提供上下文信息。Spring 上下文包括企業服務,例如
JNDI、EJB、電子郵件、國際化、校驗和調度功能。
三、Spring AOP:經過配置管理特性,Spring AOP 模塊直接將面向切面的編程功能集成到了 Spring 框架中。因此,能夠很容易地使 Spring 框架管理的任何對象支持
AOP。Spring AOP 模塊爲基於 Spring 的應用程序中的對象提供了事務管理服務。經過使用 Spring AOP,不用依賴 EJB 組件,就能夠將聲明性事務管理集成到應用程序中。
四、Spring DAO:JDBC
DAO抽象層提供了有意義的異常層次結構,可用該結構來管理
異常處理和不一樣數據庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理,而且極大地下降了須要編寫的異常代碼數量(例如打開和關閉鏈接)。Spring DAO 的面向 JDBC 的異常聽從通用的 DAO 異常層次結構。
五、Spring ORM:Spring 框架插入了若干個
ORM框架,從而提供了 ORM 的對象關係工具,其中包括
JDO、
Hibernate和
iBatisSQL Map。全部這些都聽從 Spring 的通用
事務和 DAO 異常層次結構。
六、Spring Web 模塊:Web 上下文模塊創建在應用程序上下文模塊之上,爲基於 Web 的應用程序提供了上下文。因此,Spring框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部分請求以及將請求參數綁定到
域對象的工做。
七、Spring MVC 框架:
MVC框架是一個全功能的構建 Web應用程序的 MVC 實現。經過策略接口,MVC框架變成爲高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、
Velocity、
Tiles、iText 和 POI。模型由javabean構成,存放於Map;視圖是一個接口,負責顯示模型;控制器表示邏輯代碼,是Controller的實現。Spring框架的功能能夠用在任何
J2EE
服務器中,大多數功能也適用於不受管理的環境。Spring 的核心要點是:支持不綁定到特定 J2EE服務的可重用業務和
數據訪問對象。毫無疑問,這樣的對象能夠在不一樣J2EE 環境(Web 或EJB)、獨立應用程序、
測試環境之間重用。
步驟
Spring確實使你能經過最簡單可行的解決辦法來解決你的問題。而這是有有很大價值的。同時他的源代碼的設計理念也受到不少程序員的追捧,簡潔,易用.但是從哪着手研究Spring倒是不少新手頭疼的地方,下面的參考資料將帶領你們慢慢的深刻解析Spring
1 Spring中的事務處理
2 IoC容器在Web容器中的啓動
3 Spring JDBC
4 Spring MVC
5 Spring AOP獲取Proxy
6 Spring聲明式事務處理
7 Spring AOP中對攔截器調用的實現
8 Spring驅動Hibernate的實現
9 Spring Acegi框架鑑權的實現
SpringMVC
SpringMVC是基於Spring功能之上添加的Web框架,想用SpringMVC必須先依賴Spring。 Spring能夠說是一個管理bean的容器,也能夠說是包括不少開源項目的總稱,spring mvc是其中一個開源項目。
框架
經過策略接口,Spring 框架是高度可配置的,並且包含多種視圖技術,例如 JavaServer Pages(JSP)技術、Velocity、Tiles、iText和POI。Spring MVC 框架並不知道使用的視圖,因此不會強迫開發者只使用 JSP 技術。Spring MVC 分離了控制器、模型對象、過濾器以及處理程序對象的角色,這種分離讓它們更容易進行定製。
優勢
Lifecycle for overriding binding, validation, etc,易於同其它View框架(Tiles等)無縫集成,採用
IOC便於測試。
它是一個典型的教科書式的mvc構架,而不像
struts等都是變種或者不是徹底基於mvc系統的框架,對於初學者或者想了解mvc的人來講我以爲 spring是最好的,它的實現就是教科書!第二它和
tapestry同樣是一個純正的servlet系統,這也是它和tapestry相比 struts所具備的優點。並且框架自己有代碼,看起來容易理解。