Spring是分層的Java SE/EE應用一站式的輕量級開源框架,以IoC(Inverse of Control:反轉控制)和AOP(Aspect Oriented Programming:面向切面編程)爲內核,提供了展示層Spring MVC和持久層Spring JDBC以及業務層事務管理等衆多的企業級應用技術,此外Spring以海納百川的胸懷整合了開源世界裏衆多著名的第三方框架和類庫,逐漸成爲使用最多的Java EE企業應用開源框架。java
Spring的締造者Rod Johnos是位奇才,不只在悉尼大學得到計算機學士學位,同時仍是覺得音樂學的博士,也許是音樂的細胞賦予了他程序設計的美學和靈感,讓他成就了Spring的簡約和優雅。他還具備商業才能,當Spring 1.0發佈時,Rod就和他的骨幹團隊成立了Spring Source公司,以商業化的方式對開源的Spring進行運做,最後成就了Spring今天的輝煌。web
Spring一直貫徹並遵照「好的設計優於具體實現,代碼應易於測試」,這一理念,並最終帶給咱們一個易於開發、便於測試而又功能齊全的開發框架。歸納起來Spring給咱們帶來如下好處:編程
一、方便解耦,簡化開發設計模式
經過Spring的IoC容器,咱們能夠將對象之間的依賴關係交由Spring進行控制,避免硬編碼照成的過分程序耦合。有了Spring,用戶沒必要再爲單例模式類、屬性文件解析等這些很底層的需求編寫代碼,可更專一與上層應用。數組
二、AOP編程的支持框架
經過Spring提供的AOP功能,方便進行面向切面的編程,許多不容易用傳統OOP實現的功能能夠經過AOP輕鬆應付。工具
三、聲明式事務的支持學習
在Spring中咱們能夠從單調煩悶的事物管理代碼中解脫出來,經過聲明式方式靈活的進行事物管理,提升開發效率和質量。測試
四、方便程序的測試編碼
能夠用非容器依賴的方式進行幾乎全部的測試工做,在Spring裏測試再也不是昂貴的操做,而是隨手可作的事情。
五、方便集成各類優秀框架
Spring不排斥各類優秀框架,相反,Spring能夠下降各類框架的使用難度,Spring提供了對各類優秀框架(如Struts、Hibernate、Mybatis、Hessian、Quartz等)的直接支持。
六、下降Java EE API的使用難度
Spring對不少難用的Java EE API(如JDBC、JavaMail,遠程調用等)提供了一個薄薄的封裝層,經過Spring的簡易封裝,這些API的使用難度大爲下降。
七、Spring源碼是經典學習範例
Spring的源碼設計精妙、結構清晰、匠心獨用,到處體現着大師對Java設計模式的靈活運用以及對Java技術的高深造詣。Spring框架源碼無疑是Java技術的最佳實踐範例。若是想在短期內迅速提升本身的Java水平和應用開發水平,學習和研究Spring源碼將會使你收穫到意想不到的效果。
Spring框架由1400多個類組成,整個框架按照所屬功能能夠劃分爲5個主要模塊,以下圖所示。
從總體看這5個主要模塊幾乎爲企業應用提供了所需的一切,從持久層、業務層到展示層都擁有相應的支持。IoC和AOP是Spring所依賴的根本。在此基礎上Spring整合了各類企業應用優秀框架和許多優秀的第三方類庫,成爲Java企業應用full-stack的開發框架。
● IoC
Spring核心模塊實現了IoC的功能,它將類和類之間的依賴從代碼中脫離出來,用配置的方式進行依賴關係描述,由IoC容器負責依賴類之間的建立、拼接、管理、獲取、銷燬等工做。BeanFactory接口是Spring框架的核心接口,它定義了容器許多核心功能。
Context模塊構建於核心模塊之上,它擴展了BeanFactory的功能,添加了i18n國際化、Bean生命週期控制、框架事件體系、資源加載透明化等多項功能。此外,該模塊還提供了許多企業級服務的支持,如郵件服務、任務調度、JNDI定位、EJB集成、遠程訪問等。ApplicationContext接口是Context模塊的核心接口。
表達式語言模塊是統一表達式語言(unified EL)的一個擴展,該表達式語言用於查詢和管理運行期的對象,支持設置和獲取對象屬性,調用對象方法、操做數組、集合等。還提供了邏輯表達式運算、變量定義等功能。使用它就能夠方便的用表達式串與Spring IoC容器進行交互。
● AOP模塊
AOP是繼OOP以後對編程設計思想影響最大的技術之一。AOP是進行橫切邏輯編程的思想,它開拓瞭解決問題的思路。在AOP模塊裏,Spring提供了知足AOP Alliance規範的實現,此外,還整合了AspectJ這種語言級的框架。在Spring裏實現AOP編程擁有衆多選擇。Java 5.0引入java.lang.instrument,容許在JVM啓動時啓動一個代理類,經過該代理類在運行期修改類的字節碼,改變一個類的功能,實現AOP的功能。
● 數據訪問和集成
任何應用程序,其核心問題是對數據的訪問和操做。數據有不少表現形式,如數據表、XML、消息等,而每種數據形式又擁有不一樣的數據訪問技術(如數據表的訪問既能夠直接經過JDBC,也能夠經過Hibernate或Mybatis)。
Spring站在Dao的抽象層面,創建了一套面向Dao層統一的異常體系,同時將各類訪問數據的檢查型異常轉換爲非檢查型異常,爲整合各類持久層框架提供基礎。其次,Spring經過模版化技術對各類數據反問技術進行了薄層的封裝,將模式化的代碼隱藏起來,使數據訪問的程序獲得大幅度簡化。這樣,Spring就創建起了和數據訪問形式和及訪問技術無關的統一的Dao層,藉助AOP,Spring提供了聲明式事務的功能。
● web及遠程操做,
該模塊創建在Application Context模塊之上,提供了Web應用的各類工具類,如經過Listener或Servlet初始化Spring容器,將Spring容器註冊到Web容器中。其次,該模塊還提供了多項面向Web的功能,如透明化文件上傳、Velocity、FreeMarker、XSLT的支持。此外,Spring能夠整合Struts、WebWork、Tapestry Web等MVC框架。
● web及遠程訪問
Spring本身提供了一個完整的相似於Struts的MVC框架,稱這爲Spring MVC。聽說Spring之因此也提供一個MVC框架,是由於Rod Johnson想證實實現MVC實際上是一件很簡單的工做。
此外,Spring在遠程訪問以及Web Service上提供了對不少著名框架的整合。因爲Spring框架的擴展性,特別是隨着Spring框架影響性的擴大,愈來愈多框架主動支持Spring框架,讓Spring框架應用涵蓋面愈來愈寬廣。