因爲剛搭建完一個MVC框架,決定分享一下我搭建過程當中學習到的一些東西。我以爲無論你是個初級程序員仍是高級程序員抑或是軟件架構師,在學習和了解一個框架的時候,首先都應該知道的是這個框架的原理和與其有關jar的做用、關係。這篇文章總結一下spring框架的相關知識。java
1、spirng的簡介(高手能夠跳過)程序員
Spring是一個開源框架,它由Rod Johnson建立。它是爲了解決企業應用開發的複雜性而建立的。Spring使用基本的JavaBean來完成之前只可能由EJB完成的事情。然而,Spring的用途不只限於服務器端的開發。從簡單性、可測試性和鬆耦合的角度而言,任何Java應用均可以從Spring中受益。web
2、spring的工做原理(MVC)spring
1.springmvc請全部的請求都提交給DispatcherServlet,它會委託應用系統的其餘模塊負責負責對請求進行真正的處理工做。 數據庫
2.DispatcherServlet查詢一個或多個HandlerMapping,找處處理請求的Controller.
3.DispatcherServlet請請求提交到目標Controller
4.Controller進行業務邏輯處理後,會返回一個ModelAndView
5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象
6.視圖對象負責渲染返回給客戶端。編程
3、spring的做用api
AOP 讓開發人員能夠建立非行爲性的關注點,稱爲橫切關注點,並將它們插入到應用程序代碼中。使用 AOP後,公共服務(好比日誌、持久性、事務等)就能夠分解成方面並應用到域對象上,同時不會增長域對象的對象模型的複雜性。 緩存
IOC 容許建立一個能夠構造對象的應用環境,而後向這些對象傳遞它們的協做對象。正如單詞 倒置 所代表的,IOC 就像反過來的JNDI。沒有使用一堆抽象工廠、服務定位器、單元素(singleton)和直接構造(straightconstruction),每個對象都是用其協做對象構造的。所以是由容器管理協做對象(collaborator)。
Spring即便一個AOP框架,也是一IOC容器。 Spring 最好的地方是它有助於您替換對象。有了Spring,只要用JavaBean屬性和配置文件加入依賴性(協做對象)。而後能夠很容易地在須要時替換具備相似接口的協做對象。
Spring 框架是一個分層架構,由 7 個定義良好的模塊組成。Spring模塊構建在覈心容器之上,核心容器定義了建立、配置和管理bean 的方式,如圖 1 所示。
組成 Spring 框架的每一個模塊(或組件)均可以單獨存在,或者與其餘一個或多個模塊聯合實現。每一個模塊的功能以下:
核心容器:核心容器提供 Spring框架的基本功能。核心容器的主要組件是BeanFactory,它是工廠模式的實現。BeanFactory使用控制反轉(IOC)模式將應用程序的配置和依賴性規範與實際的應用程序代碼分開。
Spring 上下文:Spring 上下文是一個配置文件,向 Spring框架提供上下文信息。Spring上下文包括企業服務,例如 JNDI、EJB、電子郵件、國際化、校驗和調度功能。
Spring AOP:經過配置管理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了Spring框架中。因此,能夠很容易地使 Spring 框架管理的任何對象支持 AOP。Spring AOP 模塊爲基於Spring的應用程序中的對象提供了事務管理服務。經過使用 Spring AOP,不用依賴EJB組件,就能夠將聲明性事務管理集成到應用程序中。
Spring DAO:JDBCDAO抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不一樣數據庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理,而且極大地下降了須要編寫的異常代碼數量(例如打開和關閉鏈接)。SpringDAO的面向 JDBC 的異常聽從通用的 DAO 異常層次結構。
Spring ORM:Spring 框架插入了若干個 ORM 框架,從而提供了 ORM的對象關係工具,其中包括JDO、Hibernate 和 iBatis SQL Map。全部這些都聽從 Spring 的通用事務和DAO異常層次結構。
Spring Web 模塊:Web 上下文模塊創建在應用程序上下文模塊之上,爲基於Web的應用程序提供了上下文。因此,Spring 框架支持與 Jakarta Struts的集成。Web模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工做。
Spring MVC 框架:MVC 框架是一個全功能的構建 Web 應用程序的 MVC實現。經過策略接口,MVC框架變成爲高度可配置的,MVC 容納了大量視圖技術,其中包括JSP、Velocity、Tiles、iText 和 POI。
Spring 框架的功能能夠用在任何 J2EE服務器中,大多數功能也適用於不受管理的環境。Spring的核心要點是:支持不綁定到特定 J2EE服務的可重用業務和數據訪問對象。毫無疑問,這樣的對象能夠在不一樣 J2EE 環境 (Web或EJB)、獨立應用程序、測試環境之間重用。tomcat
4、spring架包目錄說明服務器
aspectj目錄下是在Spring框架下使用aspectj的源代碼和測試程序文件。
Aspectj是java最先的提供AOP的應用框架。
dist 目錄下是Spring 的發佈包,關於發佈包下面會詳細進行說明。
docs 目錄下是相關的文檔,包括有Spring api 的javadoc、reference 參考指南、Spring的標籤庫使用文 件及 Spring MVC 的MVC-step-by-step 講解與示例。都是很好的文檔,值得好好研究一下。
lib 目錄下是Spring 所依賴的第三方開源包。
mock 目錄下是Spring 輔助應用測試的Mock 源程序。
samples 目錄下是Spring 的示例源程序及簡單的webapp 示例框架的示例配置,值得好好學習的有jpetstore 及petclinic,固然其它的countries、imagedb、tiles-example 也能夠好好參考一下。
src 目錄下是Spring 的源程序。
test 目錄下Spring 的單元測試源程序。
tiger 目錄下是針對在Spring框架中使用java 1.5的源程序及測試程序。Tiger是jdk 1.5版本的開發代號。
5、spring架包工做做用詳解
spring.jar 是包含有完整發布模塊的單個jar 包。可是不包括mock.jar, aspects.jar, spring-portlet.jar, and spring-hibernate2.jar。
spring-src.zip就是全部的源代碼壓縮包。
除了spring.jar 文件,Spring 還包括有其它21 個獨立的jar 包,各自包含着對應的Spring組件,用戶能夠根據本身的須要來選擇組合本身的jar 包,而沒必要引入整個spring.jar 的全部類文件。
spring-core.jar(必須)
這個jar 文件包含Spring 框架基本的核心工具類。Spring 其它組件要都要使用到這個包裏的類,是其它組件的基本核心,固然你也能夠在本身的應用系統中使用這些工具類。
外部依賴Commons Logging, (Log4J)。
spring-beans.jar(必須)
這 個jar 文件是全部應用都要用到的,它包含訪問配置文件、建立和管理bean 以及進行Inversion of Control / Dependency Injection(IoC/DI)操做相關的全部類。若是應用只需基本的IoC/DI 支持,引入spring-core.jar 及spring-beans.jar 文件就能夠了。
外部依賴spring-core,(CGLIB)。
spring-aop.jar(必須)
這個jar 文件包含在應用中使用Spring 的AOP 特性時所需的類和源碼級元數據支持。使用基於AOP 的Spring特性,如聲明型事務管理(Declarative Transaction Management),也要在應用裏包含這個jar包。
外部依賴spring-core, (spring-beans,AOP Alliance, CGLIB,Commons Attributes)。
spring-context.jar(必須)
這個jar 文件爲Spring 核心提供了大量擴展。能夠找到使用Spring ApplicationContext特性時所需的所有類,JDNI 所需的所有類,instrumentation組件以及校驗Validation 方面的相關類。
外部依賴spring-beans, (spring-aop)。
spring-dao.jar(必須)
這個jar 文件包含Spring DAO、Spring Transaction 進行數據訪問的全部類。爲了使用聲明型事務支持,還需在本身的應用裏包含spring-aop.jar。
外部依賴spring-core,(spring-aop, spring-context, JTA API)。
spring-jdbc.jar(必須)
這個jar 文件包含對Spring 對JDBC 數據訪問進行封裝的全部類。
外部依賴spring-beans,spring-dao。
spring-support.jar(必須)
這個jar 文件包含支持UI模版(Velocity,FreeMarker,JasperReports),郵件服務,腳本服務(JRuby),緩存Cache(EHCache),任務計劃Scheduling(uartz)方面的類。
外部依賴spring-context, (spring-jdbc, Velocity, FreeMarker, JasperReports, BSH, Groovy, JRuby, Quartz, EHCache)
spring-web.jar(必須)
這個jar 文件包含Web 應用開發時,用到Spring 框架時所需的核心類,包括自動載入Web Application Context 特性的類、Struts 與JSF 集成類、文件上傳的支持類、Filter 類和大量工具輔助類。
外部依賴spring-context, Servlet API, (JSP API, JSTL, Commons FileUpload, COS)。
spring-webmvc.jar
這個jar 文件包含Spring MVC 框架相關的全部類。包括框架的Servlets,Web MVC框架,控制器和視圖支持。固然,若是你的應用使用了獨立的MVC 框架,則無需這個JAR 文件裏的任何類。
外部依賴spring-web, (spring-support,Tiles,iText,POI)。
spring-portlet.jar
spring本身實現的一個相似Spring MVC的框架。包括一個MVC框架和控制器。
外部依賴spring-web, Portlet API,(spring-webmvc)。
spring-struts.jar
Struts框架支持,能夠更方便更容易的集成Struts框架。
外部依賴spring-web,Struts。
spring-remoting.jar
這個jar 文件包含支持EJB、遠程調用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的類。
外部依賴spring-aop, (spring-context,spring-web,Hessian,Burlap,JAX-RPC,EJB API)。
spring-jmx.jar
這個jar包提供了對JMX 1.0/1.2的支持類。
外部依賴spring-beans,spring-aop, JMX API。
spring-jms.jar
這個jar包提供了對JMS 1.0.2/1.1的支持類。
外部依賴spring-beans,spring-dao,JMS API。
spring-jca.jar
對JCA 1.0的支持。
外部依賴spring-beans,spring-dao, JCA API。
spring-jdo.jar
對JDO 1.0/2.0的支持。
外部依賴spring-jdbc, JDO API, (spring-web)。
spring-jpa.jar
對JPA 1.0的支持。
外部依賴spring-jdbc, JPA API, (spring-web)。
spring-hibernate2.jar
對Hibernate 2.1的支持,已經不建議使用。
外部依賴spring-jdbc,Hibernate2,(spring-web)。
spring-hibernate3.jar
對Hibernate 3.0/3.1/3.2的支持。
外部依賴spring-jdbc,Hibernate3,(spring-web)。
spring-toplink.jar
對TopLink框架的支持。
外部依賴spring-jdbc,TopLink。
spring-ibatis.jar
對iBATIS SQL Maps的支持。
外部依賴spring-jdbc,iBATIS SQL Maps。
另外的兩個包。
spring-mock.jar
這 個jar 文件包含Spring 一整套mock 類來輔助應用的測試。Spring 測試套件使用了其中大量mock 類,這樣測試就更加簡單。模擬HttpServletRequest 和HttpServletResponse 類在Web 應用單元測試是很方便的。而且提供了對JUnit的支持。
外部依賴spring-core。
spring-aspects.jar
提供對AspectJ的支持,以即可以方便的將面向方面的功能集成進IDE中,好比Eclipse AJDT。
外部依賴。
WEAVER JARS (dist/weavers)說明。
spring-agent.jar
Spring的InstrumentationSavingAgent (爲InstrumentationLoadTimeWeaver),一個設備代理包,能夠參考JDK1.5的Instrumentation功能得到更多信息。
外部依賴none (for use at JVM startup: "-javaagent:spring-agent.jar")。
spring-tomcat-weaver.jar
擴展Tomcat的ClassLoader,使其可使用instrumentation(設備)類。
外部依賴none (for deployment into Tomcat's "server/lib" directory)。
轉載:http://java-ahz.iteye.com/blog/1722976
|
(2)spring-beans.jar
這個jar文件是全部應用都要用到的,它包含訪問配置文件、建立和管理bean以及進行Inversion?of?Control?/?Dependency?Injection(IoC/DI)操做相關的全部類。若是應用只需基本的IoC/DI支持,引入spring-core.jar及spring-?beans.jar文件就能夠了。
(3)spring-aop.jar
這個jar文件包含在應用中使用Spring的AOP特性時所需的類。使用基於AOP的Spring特性,如聲明型事務管理(Declarative?Transaction?Management),也要在應用裏包含這個jar包。
(4)spring-context.jar
這個jar文件爲Spring核心提供了大量擴展。能夠找到使用Spring?ApplicationContext特性時所需的所有類,JDNI所需的所有類,UI方面的用來與模板(Templating)引擎如?Velocity、FreeMarker、JasperReports集成的類,以及校驗Validation方面的相關類。
(5)spring-dao.jar
這個jar文件包含Spring?DAO、Spring?Transaction進行數據訪問的全部類。爲了使用聲明型事務支持,還需在本身的應用裏包含spring-aop.jar。
(6)spring-hibernate.jar
這個jar文件包含Spring對Hibernate?2及Hibernate?3進行封裝的全部類。
(7)spring-jdbc.jar
這個jar文件包含對Spring對JDBC數據訪問進行封裝的全部類。
(8)spring-orm.jar
這個jar文件包含Spring對DAO特性集進行了擴展,使其支持?iBATIS、JDO、OJB、TopLink,由於Hibernate已經獨立成包了,如今不包含在這個包裏了。這個jar文件裏大部分的類都要依賴?spring-dao.jar裏的類,用這個包時你須要同時包含spring-dao.jar包。
(9)spring-remoting.jar
這個jar文件包含支持EJB、JMS、遠程調用Remoting(RMI、Hessian、Burlap、Http?Invoker、JAX-RPC)方面的類。
10)spring-support.jar
(11)spring-web.jar
這個jar文件包含Web應用開發時,用到Spring框架時所需的核心類,包括自動載入WebApplicationContext特性的類、Struts與JSF集成類、文件上傳的支持類、Filter類和大量工具輔助類。
(12)spring-webmvc.jar
這個jar文件包含Spring?MVC框架相關的全部類。包含國際化、標籤、Theme、視圖展示的FreeMarker、JasperReports、Tiles、Velocity、?XSLT相關類。固然,若是你的應用使用了獨立的MVC框架,則無需這個JAR文件裏的任何類。
(13)spring-mock.jar
這個jar文件包含Spring一整套mock類來輔助應用的測試。Spring測試套件使用了其中大量mock類,這樣測試就更加簡單。模擬HttpServletRequest和HttpServletResponse類在Web應用單元測試是很方便的。
如何選擇這些發佈包,決定選用哪些發佈包其實至關簡單。若是你正在構建Web應用並將全程使用Spring,那麼最好就使用單個所有的?spring.jar文件;若是你的應用僅僅用到簡單的Inversion?of?Control?/?Dependency?Injection(IoC/DI)容器,那麼只需spring-core.jar與spring-beans.jar便可;若是你對發佈的大小要求很高,那麼就得精挑細選了,只取包含本身所需特性的jar文件了。採用獨立的發佈包你能夠避免包含本身的應用不須要的所有類。固然你能夠採用其它的一些工具來設法令整個應用包變小,節省空間的重點在於準確地找出本身所需的Spring依賴類,而後合併所需的類與包就能夠了。Eclispe有個插件叫?ClassPath?Helper能夠幫你找找所依賴的類。