【第一章】 Spring概述 —— 跟我學Spring3

1.1  Spring歸納

1.1.1  Spring是什麼

Spring是一個開源的輕量級Java SE(Java 標準版本)/Java EE(Java 企業版本)開發應用框架,其目的是用於簡化企業級應用程序開發。應用程序是由一組相互協做的對象組成。而在傳統應用程序開發中,一個完整的應用是由一組相互協做的對象組成。因此開發一個應用除了要開發業務邏輯以外,最多的是關注如何使這些對象協做來完成所需功能,並且要低耦合、高內聚。業務邏輯開發是不可避免的,那若是有個框架出來幫咱們來建立對象及管理這些對象之間的依賴關係。可能有人說了,好比「抽象工廠、工廠方法設計模式」不也能夠幫咱們建立對象,「生成器模式」幫咱們處理對象間的依賴關係,不也能完成這些功能嗎?但是這些又須要咱們建立另外一些工廠類、生成器類,咱們又要而外管理這些類,增長了咱們的負擔,若是能有種經過配置方式來建立對象,管理對象之間依賴關係,咱們不須要經過工廠和生成器來建立及管理對象之間的依賴關係,這樣咱們是否是減小了許多工做,加速了開發,能節省出不少時間來幹其餘事。Spring框架剛出來時主要就是來完成這個功能。 java

Spring框架除了幫咱們管理對象及其依賴關係,還提供像通用日誌記錄、性能統計、安全控制、異常處理等面向切面的能力,還能幫我管理最頭疼的數據庫事務,自己提供了一套簡單的JDBC訪問實現,提供與第三方數據訪問框架集成(如Hibernate、JPA),與各類Java EE技術整合(如Java Mail、任務調度等等),提供一套本身的web層框架Spring MVC、並且還能很是簡單的與第三方web框架集成。從這裏咱們能夠認爲Spring是一個超級粘合平臺,除了本身提供功能外,還提供粘合其餘技術和框架的能力,從而使咱們能夠更自由的選擇到底使用什麼技術進行開發。並且不論是JAVA SE(C/S架構)應用程序仍是JAVA EE(B/S架構)應用程序均可以使用這個平臺進行開發。讓咱們來深刻看一下Spring到底能幫咱們作些什麼? web


1.1.2   Spring能幫咱們作什麼

Spring除了不能幫咱們寫業務邏輯,其他的幾乎什麼都能幫助咱們簡化開發: 數據庫

 

1、傳統程序開發,建立對象及組裝對象間依賴關係由咱們在程序內部進行控制,這樣會加大各個對象間的耦合,若是咱們要修改對象間的依賴關係就必須修改源代碼,從新編譯、部署;而若是採用Spring,則由Spring根據配置文件來進行建立及組裝對象間依賴關係,只須要改配置文件便可,無需從新編譯。因此,Spring能幫咱們根據配置文件建立及組裝對象之間的依賴關係。 編程

 

2、當咱們要進行一些日誌記錄、權限控制、性能統計等時,在傳統應用程序當中咱們可能在須要的對象或方法中進行,並且好比權限控制、性能統計大部分是重複的,這樣代碼中就存在大量重複代碼,即便有人說我把通用部分提取出來,那必然存在調用仍是存在重複,像性能統計咱們可能只是在必要時才進行,在診斷完畢後要刪除這些代碼;還有日誌記錄,好比記錄一些方法訪問日誌、數據訪問日誌等等,這些都會滲透到各個要訪問方法中;還有權限控制,必須在方法執行開始進行審覈,想一想這些是多麼可怕並且是多麼無聊的工做。若是採用Spring,這些日誌記錄、權限控制、性能統計從業務邏輯中分離出來,經過Spring支持的面向切面編程,在須要這些功能的地方動態添加這些功能,無需滲透到各個須要的方法或對象中;有人可能說了,咱們可使用「代理設計模式」或「包裝器設計模式」,你可使用這些,但仍是須要經過編程方式來建立代理對象,仍是要耦合這些代理對象,而採用Spring 面向切面編程能提供一種更好的方式來完成上述功能,通常經過配置方式,並且不須要在現有代碼中添加任何額外代碼,現有代碼專一業務邏輯。因此,Spring 面向切面編程能幫助咱們無耦合的實現日誌記錄,性能統計,安全控制。 設計模式

 

3、在傳統應用程序當中,咱們如何來完成數據庫事務管理?須要一系列「獲取鏈接,執行SQL,提交或回滾事務,關閉鏈接」,並且還要保證在最後必定要關閉鏈接,多麼可怕的事情,並且也很無聊;若是採用Spring,咱們只需獲取鏈接,執行SQL,其餘的都交給Spring來管理了,簡單吧。因此,Spring能很是簡單的幫咱們管理數據庫事務。 數組

 

4、Spring還提供了與第三方數據訪問框架(如Hibernate、JPA)無縫集成,並且本身也提供了一套JDBC訪問模板,來方便數據庫訪問。 緩存

 

5、Spring還提供與第三方Web(如Struts、JSF)框架無縫集成,並且本身也提供了一套Spring MVC框架,來方便web層搭建。 安全

 

6、Spring能方便的與Java EE(如Java Mail、任務調度)整合,與更多技術整合(好比緩存框架)。 服務器

 

Spring能幫咱們作這麼多事情,提供這麼多功能和與那麼多主流技術整合,並且是幫咱們作了開發中比較頭疼和困難的事情,那可能有人會問,難道只有Spring這一個框架,沒有其餘選擇?固然有,好比EJB須要依賴應用服務器、開發效率低、在開發中小型項目是宰雞拿牛刀,雖然發展到如今EJB比較好用了,但仍是比較笨重還須要依賴應用服務器等。那爲什麼須要使用Spring,而不是其餘框架呢?讓咱們接着往下看。 架構

1.1.3    爲什麼須要Spring

一 首先闡述幾個概念

1、應用程序:是能完成咱們所須要功能的成品,好比購物網站、OA系統。

2、框架:是能完成必定功能的半成品,好比咱們可使用框架進行購物網站開發;框架作一部分功能,咱們本身作一部分功能,這樣應用程序就建立出來了。並且框架規定了你在開發應用程序時的總體架構,提供了一些基礎功能,還規定了類和對象的如何建立、如何協做等,從而簡化咱們開發,讓咱們專一於業務邏輯開發。

3、非侵入式設計:從框架角度能夠這樣理解,無需繼承框架提供的類,這種設計就能夠看做是非侵入式設計,若是繼承了這些框架類,就是侵入設計,若是之後想更換框架以前寫過的代碼幾乎沒法重用,若是非侵入式設計則以前寫過的代碼仍然能夠繼續使用。

4、輕量級及重量級:輕量級是相對於重量級而言的,輕量級通常就是非入侵性的、所依賴的東西很是少、資源佔用很是少、部署簡單等等,其實就是比較容易使用,而重量級正好相反。

5、POJO:POJO(Plain Old Java Objects)簡單的Java對象,它能夠包含業務邏輯或持久化邏輯,但不擔當任何特殊角色且不繼承或不實現任何其它Java框架的類或接口。

6、容器:在平常生活中容器就是一種盛放東西的器具,從程序設計角度看就是裝對象的的對象,由於存在放入、拿出等操做,因此容器還要管理對象的生命週期。

7、控制反轉:即Inversion of Control,縮寫爲IoC,控制反轉還有一個名字叫作依賴注入(Dependency Injection),就是由容器控制程序之間的關係,而非傳統實現中,由程序代碼直接操控。

8、Bean通常指容器管理對象,在Spring中指Spring IoC容器管理對象。

 

二 爲何須要Spring及Spring的優勢

●很是輕量級的容器:以集中的、自動化的方式進行應用程序對象建立和裝配,負責對象建立和裝配,管理對象生命週期,能組合成複雜的應用程序。Spring容器是非侵入式的(不須要依賴任何Spring特定類),並且徹底採用POJOs進行開發,使應用程序更容易測試、更容易管理。並且核心JAR包很是小,Spring3.0.5不到1M,並且不須要依賴任何應用服務器,能夠部署在任何環境(Java SE或Java EE)。

AOP:AOP是Aspect Oriented Programming的縮寫,意思是面向切面編程,提供從另外一個角度來考慮程序結構以完善面向對象編程(相對於OOP),便可以經過在編譯期間、裝載期間或運行期間實如今不修改源代碼的狀況下給程序動態添加功能的一種技術。通俗點說就是把可重用的功能提取出來,而後將這些通用功能在合適的時候織入到應用程序中;好比安全,日記記錄,這些都是通用的功能,咱們能夠把它們提取出來,而後在程序執行的合適地方織入這些代碼並執行它們,從而完成須要的功能並複用了這些功能。

● 簡單的數據庫事務管理:在使用數據庫的應用程序當中,本身管理數據庫事務是一項很讓人頭疼的事,並且很容易出現錯誤,Spring支持可插入的事務管理支持,並且無需JEE環境支持,經過Spring管理事務能夠把咱們從事務管理中解放出來來專一業務邏輯。

JDBC抽象及ORM框架支持:Spring使JDBC更加容易使用;提供DAO(數據訪問對象)支持,很是方便集成第三方ORM框架,好比Hibernate等;而且徹底支持Spring事務和使用Spring提供的一致的異常體系。

靈活的Web層支持:Spring自己提供一套很是強大的MVC框架,並且能夠很是容易的與第三方MVC框架集成,好比Struts等。

簡化各類技術集成:提供對Java Mail、任務調度、JMX、JMS、JNDI、EJB、動態語言、遠程訪問、Web Service等的集成。

Spring能幫助咱們簡化應用程序開發,幫助咱們建立和組裝對象,爲咱們管理事務,簡單的MVC框架,能夠把Spring看做是一個超級粘合平臺,能把不少技術整合在一塊兒,造成一個總體,使系統結構更優良、性能更出衆,從而加速咱們程序開發,有如上優勢,咱們沒有理由不考慮使用它。

1.1.4  如何學好Spring

要學好Spring,首先要明確Spring是個什麼東西,能幫咱們作些什麼事情,知道了這些而後作個簡單的例子,這樣就基本知道怎麼使用Spring了。Spring核心是IoC容器,因此必定要透徹理解什麼是IoC容器,以及如何配置及使用容器,其餘全部技術都是基於容器實現的;理解好IoC後,接下來是面向切面編程,首先仍是明確概念,基本配置,最後是實現原理,接下來就是數據庫事務管理,其實Spring管理事務是經過面向切面編程實現的,因此基礎很重要,IoC容器和麪向切面編程搞定後,其他都是基於這倆東西的實現,學起來就更加輕鬆了。要學好Spring不能急,必定要把基礎打牢,基礎牢固了,這就是磨刀不誤砍柴工。

1.2  Spring基礎

1.2.1  Spring架構圖

圖 1-1 Spring架構圖   

核心容器:包括Core、Beans、Context、EL模塊。

Core模塊:封裝了框架依賴的最底層部分,包括資源訪問、類型轉換及一些經常使用工具類。

Beans模塊:提供了框架的基礎部分,包括反轉控制和依賴注入。其中Bean Factory是容器核心,本質是「工廠設計模式」的實現,並且無需編程實現「單例設計模式」,單例徹底由容器控制,並且提倡面向接口編程,而非面向實現編程;全部應用程序對象及對象間關係由框架管理,從而真正把你從程序邏輯中把維護對象之間的依賴關係提取出來,全部這些依賴關係都由BeanFactory來維護。

●Context模塊:以Core和Beans爲基礎,集成Beans模塊功能並添加資源綁定、數據驗證、國際化Java EE支持、容器生命週期、事件傳播等;核心接口是ApplicationContext。

●EL模塊:提供強大的表達式語言支持,支持訪問和修改屬性值,方法調用,支持訪問及修改數組、容器和索引器,命名變量,支持算數和邏輯運算,支持從Spring 容器獲取Bean,它也支持列表投影、選擇和通常的列表聚合等。

 

AOP、Aspects模塊:

AOP模塊:Spring AOP模塊提供了符合 AOP Alliance規範的面向方面的編程(aspect-oriented programming)實現,提供好比日誌記錄、權限控制、性能統計等通用功能和業務邏輯分離的技術,而且能動態的把這些功能添加到須要的代碼中;這樣各專其職,下降業務邏輯和通用功能的耦合。

Aspects模塊:提供了對AspectJ的集成,AspectJ提供了比Spring ASP更強大的功能。

 

數據訪問/集成模塊:該模塊包括了JDBC、ORM、OXM、JMS和事務管理。

●事務模塊:該模塊用於Spring管理事務,只要是Spring管理對象都能獲得Spring管理事務的好處,無需在代碼中進行事務控制了,並且支持編程和聲明性的事物管理。

●JDBC模塊:提供了一個JBDC的樣例模板,使用這些模板能消除傳統冗長的JDBC編碼還有必須的事務控制,並且能享受到Spring管理事務的好處。

●ORM模塊:提供與流行的「對象-關係」映射框架的無縫集成,包括Hibernate、JPA、Ibatiss等。並且可使用Spring事務管理,無需額外控制事務。

●OXM模塊:提供了一個對Object/XML映射實現,將java對象映射成XML數據,或者將XML數據映射成java對象,Object/XML映射實現包括JAXB、Castor、XMLBeans和XStream。

●JMS模塊:用於JMS(Java Messaging Service),提供一套 「消息生產者、消息消費者」模板用於更加簡單的使用JMS,JMS用於用於在兩個應用程序之間,或分佈式系統中發送消息,進行異步通訊。

●Web/Remoting模塊:Web/Remoting模塊包含了Web、Web-Servlet、Web-Struts、Web-Porlet模塊。

●Web模塊:提供了基礎的web功能。例如多文件上傳、集成IoC容器、遠程過程訪問(RMI、Hessian、Burlap)以及Web Service支持,並提供一個RestTemplate類來提供方便的Restful services訪問。

●Web-Servlet模塊:提供了一個Spring MVC Web框架實現。Spring MVC框架提供了基於註解的請求資源注入、更簡單的數據綁定、數據驗證等及一套很是易用的JSP標籤,徹底無縫與Spring其餘技術協做。

●Web-Struts模塊:提供了與Struts無縫集成,Struts1.x 和Struts2.x都支持

 

Test模塊: Spring支持Junit和TestNG測試框架,並且還額外提供了一些基於Spring的測試功能,好比在測試Web框架時,模擬Http請求的功能。

1.2.2     典型應用場景

  Spring能夠應用到許多場景,從最簡單的標準Java SE程序到企業級應用程序都能使用Spring來構建。如下介紹幾個比較流行的應用場景:

 

典型Web應用程序應用場景:

圖1-2 web應用程序應用場景


在Web應用程序應用場景中,典型的三層架構:數據模型層實現域對象;數據訪問層實現數據訪問;邏輯層實現業務邏輯;web層提供頁面展現;全部這些層組件都由Spring進行管理,享受到Spring事務管理、AOP等好處,並且請求惟一入口就是DispachterServlet,它經過把請求映射爲相應web層組件來實現相應請求功能。

 

遠程訪問應用場景:

Spring能很是方便的提供暴露RMI服務,遠程訪問服務如Hessian、Burlap等,實現很是簡單隻需經過在Spring中配置相應的地址及須要暴露的服務便可輕鬆實現,後邊會有介紹;

 

EJB應用場景:

Spring也能夠與EJB輕鬆集成,後邊會詳細介紹。

相關文章
相關標籤/搜索