1. 程式人生 > >Spring學習(3):Spring概述(轉載)

Spring學習(3):Spring概述(轉載)

效率 調度 jpa 源代碼 一個 維護 html www hiberna

1. Spring是什麽?

  Spring是一個開源的輕量級Java SE(Java 標準版本)/Java EE(Java 企業版本)開發應用框架,其目的是用於簡化企業級應用程序開發。

  在面向對象思想中,應用程序是由一組相互協作的對象組成。開發一個應用除了要開發業務邏輯之外,最多的是關註如何使這些對象協作來完成所需功能,而且要低耦合、高內聚。業務邏輯開發是不可避免的,那如果有個框架出來幫我們來管理對象及管理這些對象之間的依賴關系。這樣我們是不是減少了許多工作,加速了開發,能節省出很多時間來幹其他事。Spring框架剛出來時主要就是來完成這個功能。

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

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,而不是其他框架呢?讓我們接著往下看。

3. 為何需要Spring

一. 首先闡述幾個概念

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

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

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

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

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

6、 容器:在日常生活中容器就是一種盛放東西的器具,從程序設計角度看就是裝對象的的對象,因為存在放入、拿出等操作,所以容器還要管理對象的生命周期。

7、 IoC:即Inversion of Control,縮寫為IoC,譯為控制反轉。描述:由容器控制程序內部對象生命周期及對象之間的關系,而非傳統實現中,由程序內部代碼直接操控。

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

9、 面向接口編程:在面向對象的系統中所有的類或者模塊之間的交互是由接口完成的。(參考資料:https://www.cnblogs.com/knsbyoo/p/9079374.html)

10、AOP:Aspect Oriented Programming的縮寫,面向切面編程。描述:將與業務邏輯無關的公共部分抽離開,形成一個橫切的關註點(比如權限問題,比如日誌問題)。一般情況下,這個橫切的關註點在公司裏有專人負責,業務邏輯部分的編碼人員不需要關心他,公司需要的時候只是配置一下xml文件即可,方便快捷,而且出問題也是切面的負責人負責調試測試,與主邏輯無關。(松耦合,業務與公共部分分離,提高開發,維護,測試效率。)(參考資料:CSDN:https://www.cnblogs.com/xuejupo/p/5206087.html)

11、DI:Dependency Injection的縮寫,依賴註入。描述:當一個bean實例引用到了另外一個bean實例時spring容器幫助我們創建依賴bean實例並註入(傳遞)到另一個bean中。對象依賴IOC容器註入被依賴的對象。IOC思想的具體實現,面向接口編寫的思想的實現。(參考資料:https://www.cnblogs.com/WarBlog/p/8118265.html,https://blog.csdn.net/javazejian/article/details/54561302#spring-%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5)、

二. 為什麽需要Spring及Spring的優點

1. 輕量級容器:以集中的、自動化的方式進行應用程序對象創建和裝配,負責對象創建和裝配,管理對象生命周期,能組合成復雜的應用程序。Spring容器是非侵入式的(不需要依賴任何Spring特定類),而且完全采用POJOs進行開發,使應用程序更容易測試、更容易管理。而且核心JAR包非常小,Spring3.0.5不到1M,而且不需要依賴任何應用服務器,可以部署在任何環境(Java SE或Java EE)。(非侵入式編程,POJOS,體積小)

2. AOP:可重用的功能提取出來,比如安全,日記記錄,這些都是通用的功能,我們可以把它們提取出來,然後在程序執行的合適地方織入這些代碼並執行它們,從而完成需要的功能並復用了這些功能。

3. 簡單的數據庫事務管理:Spring支持可插入的事務管理支持,而且無需JEE環境支持,通過Spring管理事務可以把我們從事務管理中解放出來來專註業務邏輯。(可以通過xml文件聲明事務)

4. JDBC抽象及ORM框架支持:Spring使JDBC更加容易使用;提供DAO(數據訪問對象)支持,非常方便集成第三方ORM框架,比如Hibernate等;並且完全支持Spring事務和使用Spring提供的一致的異常體系。(JDBC封裝,支持ORM框架)

5. 靈活的Web層支持:Spring本身提供一套非常強大的MVC框架,而且可以非常容易的與第三方MVC框架集成,比如Struts等。(可集成MVC框架,本身也有)

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

  總結:簡化開發,幫助我們創建和組裝對象,為我們管理事務,簡單的MVC框架,可以把Spring看作是一個超級粘合平臺,能把很多技術整合在一起,形成一個整體,使系統結構更優良、性能更出眾,從而加速我們程序開發。

以上參考資料來源各個網站,主要在閱讀該文章的基礎上,分析理解。尊重原創,附錄文章地址:http://si_shuok_.com/forum/blogPost/list/2426.html(剔除掉空格)

Spring學習(3):Spring概述(轉載)