Spring5 概述

一,概述

  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 到底能幫咱們作些什麼?程序員

1.1 , 一切從bean開始

  1996,Java 還只是一個新興的、初出茅廬的編程語言。人們之因此關注她僅僅是由於,可使用
Java 的 Applet 來開發 Web 應用。但這些開發者很快就發現這個新興的語言還能作更多的事情。與之
前的全部語言不一樣,Java 讓模塊化構建複雜的系統成爲可能(當時的軟件行業雖然在業務上日新月異,
但當時開發用的是傳統的面向過程開發思想,軟件的開發效率一直踟躕不前。伴隨着業務複雜性的不斷
加深,開發也變得愈加困難。其實,當時也是面向對象思想飛速發展的時期,她在 80 年代末被提出,
成熟於 90 年代,現今大多數編程語言都是面向對象的,固然這是後話了)。他們爲 Applet 而來,爲
組件化而留。這即是最先的 Java。web

  一樣在這一年的 12 月,Sun 公司發佈了當時還名不見經傳但後來人盡皆知的 JavaBean 1.00-A 規
範。早期的 JavaBean 規範針對於 Java,她定義了軟件組件模型。這個規範規定了一整套編碼策略,使
簡單的 Java 對象不只能夠被重用,並且還能夠輕鬆地構建更爲複雜的應用。儘管 JavaBean 最初是爲
重用應用組件而設計的,但當時他們倒是主要用做構建窗體控件,畢竟在 PC 時代那纔是主流。但相比
於當時正如日中天的 Delphi、VB 和 C++,他看起來仍是太簡易了,以致於沒法勝任任何」實際的」工做。spring

  一樣在這一年的 12 月,Sun 公司發佈了當時還名不見經傳但後來人盡皆知的 JavaBean 1.00-A 規
範。早期的 JavaBean 規範針對於 Java,她定義了軟件組件模型。這個規範規定了一整套編碼策略,使
簡單的 Java 對象不只能夠被重用,並且還能夠輕鬆地構建更爲複雜的應用。儘管 JavaBean 最初是爲
重用應用組件而設計的,但當時他們倒是主要用做構建窗體控件,畢竟在 PC 時代那纔是主流。但相比
於當時正如日中天的 Delphi、VB 和 C++,他看起來仍是太簡易了,以致於沒法勝任任何」實際的」工做。數據庫

  複雜的應用一般須要諸如事物、安全、分佈式等服務的支持,但 JavaBean 並未直接提供。因此到
了 1998 年 3 月,Sun 發佈了 EJB 1.0 規範,該規範把 Java 組件的設計理念延伸到了服務器端,並提
供了許多必須的企業級服務,但他也再也不像早期的 JavaBean 那麼簡單了。實際上,除了名字,EJB Bean
已經和 JavaBean 沒有任何關係了。編程

  儘管現實中有不少系統是基於 EJB 構建的,但 EJB 歷來沒有實現它最初的設想:簡化開發。EJB 的
聲明式編程模型的確簡化了不少基礎架構層面的開發,例如事務和安全;但另外一方面 EJB 在部署描述符
和配套代碼實現等方面變得異常複雜。隨着時間的推移,不少開發者對 EJB 已經再也不抱有幻想,開始尋
求更簡潔的方法。設計模式

  如今 Java 組件開發理念從新迴歸正軌。新的編程技術 AOP 和 DI 的不斷出現,他們爲 JavaBean 提
供了以前 EJB 才能擁有的強大功能。這些技術爲 POJO 提供了相似 EJB 的聲明式編程模型,而沒有引入
任何 EJB 的複雜性。當簡單的 JavaBean 足以勝任時,人們便不肯編寫笨重的 EJB 組件了。緩存

  客觀地講,EJB 的發展甚至促進了基於 POJO 的編程模型。引入新的理念,最新的 EJB 規範相比之
前的規範有了史無前例的簡化,但對不少開發者而言,這一切的一切都來得太遲了。到了 EJB 3 規範發
布時,其餘基於 POJO 的開發架構已經成爲事實的標準了,而 Spring 框架也是在這樣的大環境下出現
的。安全

1.2 ,Spring 設計的初衷

  Spring 是爲解決企業級應用開發的複雜性而設計,她能夠作不少事。但歸根到底支撐 Spring 的僅
僅是少量的基本理念,而全部地這些的基本理念都能能夠追溯到一個最根本的使命:簡化開發。這是一
個鄭重的承諾,其實許多框架都聲稱在某些方面作了簡化。
而 Spring主要是經過:面向 Bean、依賴注入以及面向切面這三種方式來達成的。服務器

1.3 ,BOP 編程

  Spring 是面向 Bean 的編程(Bean Oriented Programming, BOP),Bean 在 Spring 中才是真
正的主角。Bean在Spring中做用就像Object對OOP的意義同樣,Spring中沒有Bean也就沒有Spring
存在的意義。Spring 提供了 IOC 容器經過配置文件或者註解的方式來管理對象之間的依賴關係。架構

  控制反轉(其中最多見的方式叫作依賴注入(Dependency Injection,DI),還有一種方式叫「依
賴查找」(Dependency Lookup,DL),她在 C++、Java、PHP 以及.NET 中都運用。在最先的 Spring
中是包含有依賴注入方法和依賴查詢的,但由於依賴查詢使用頻率太低,不久就被 Spring 移除了,所
以在 Spring 中控制反轉也被稱做依賴注入),她的基本概念是:不建立對象,可是描述建立它們的方式。
在代碼中不直接與對象和服務鏈接,但在配置文件中描述哪個組件須要哪一項服務。容器(在 Spring
框架中是 IOC 容器)負責將這些聯繫在一塊兒。

  在典型的 IOC 場景中,容器建立了全部對象,並設置必要的屬性將它們鏈接在一塊兒,決定什麼時間
調用方法。

1.3 ,依賴注入的基本概念

  Spring 設計的核心 org.springframework.beans 包(架構核心是 org.springframework.core
包),它的設計目標是與 JavaBean 組件一塊兒使用。這個包一般不是由用戶直接使用,而是由服務器將
其用做其餘多數功能的底層中介。下一個最高級抽象是 BeanFactory 接口,它是工廠設計模式的實現,
容許經過名稱建立和檢索對象。BeanFactory 也能夠管理對象之間的關係。
BeanFactory 支持兩個對象模型。

  1. 單例:模型提供了具備特定名稱的對象的共享實例,能夠在查詢時對其進行檢索。Singleton 是
    默認的也是最經常使用的對象模型。對於無狀態服務對象很理想。
  2. 原型:模型確保每次檢索都會建立單獨的對象。在每一個用戶都須要本身的對象時,原型模型最適
    合。Bean 工廠的概念是 Spring 做爲 IOC 容器的基礎。IOC則將處理事情的責任從應用程序代碼轉移框架。

1.4 ,AOP 編程理念

  面向切面編程,即 AOP,是一種編程思想,它容許程序員對橫切關注點或橫切典型的職責分界線的
行爲(例如日誌和事務管理)進行模塊化。AOP 的核心構造是方面(切面),它將那些影響多個類的行
爲封裝到可重用的模塊中。

  AOP 和 IOC 是補充性的技術,它們都運用模塊化方式解決企業應用程序開發中的複雜問題。在典型
的面向對象開發方式中,可能要將日誌記錄語句放在全部方法和 Java 類中才能實現日誌功能。在 AOP
方式中,能夠反過來將日誌服務模塊化,並以聲明的方式將它們應用到須要日誌的組件上。固然,優點
就是 Java 類不須要知道日誌服務的存在,也不須要考慮相關的代碼。因此,用 Spring AOP 編寫的應
用程序代碼是鬆散耦合的。
AOP 的功能徹底集成到了 Spring 事務管理、日誌和其餘各類特性的上下文中。
AOP 編程的經常使用場景有:Authentication 權限認證、Logging 日誌、Transctions Manager 事務、
Lazy Loading 懶加載、Context Process 上下文處理、Error Handler 錯誤跟蹤(異常捕獲機制)
、Cache 緩存。

文檔有參考其餘資料,若是問題請聯繫我,進行刪除!

相關文章
相關標籤/搜索