Spring 概述

2022-05-21 15:16 更新

Spring 是最受歡迎的企業(yè)級(jí) Java 應(yīng)用程序開(kāi)發(fā)框架,數(shù)以百萬(wàn)的來(lái)自世界各地的開(kāi)發(fā)人員使用 Spring 框架來(lái)創(chuàng)建性能好、易于測(cè)試、可重用的代碼。

Spring 框架是一個(gè)開(kāi)源的 Java 平臺(tái),它最初是由 Rod Johnson 編寫(xiě)的,并且于 2003 年 6 月首次在 Apache 2.0 許可下發(fā)布。

Spring 是輕量級(jí)的框架,其基礎(chǔ)版本只有 2 MB 左右的大小。

Spring 框架的核心特性是可以用于開(kāi)發(fā)任何 Java 應(yīng)用程序,但是在 Java EE 平臺(tái)上構(gòu)建 web 應(yīng)用程序是需要擴(kuò)展的。 Spring 框架的目標(biāo)是使 J2EE 開(kāi)發(fā)變得更容易使用,通過(guò)啟用基于 POJO 的編程模型來(lái)促進(jìn)良好的編程實(shí)踐。

三層架構(gòu)     

  • A 表現(xiàn)層   web層    MVC是表現(xiàn)層的一個(gè)設(shè)計(jì)模型 
  • B 業(yè)務(wù)層  service層
  • C 持久層  dao層

Spring 的優(yōu)良特性

  • 非侵入式:基于Spring開(kāi)發(fā)的應(yīng)用中的對(duì)象可以不依賴(lài)于Spring的API
  • 控制反轉(zhuǎn):IOC——Inversion of Control,指的是將對(duì)象的創(chuàng)建權(quán)交給 Spring 去創(chuàng)建。使用 Spring 之前,對(duì)象的創(chuàng)建都是由我們自己在代碼中new創(chuàng)建。而使用 Spring 之后。對(duì)象的創(chuàng)建都是給了 Spring 框架。
  • 依賴(lài)注入:DI——Dependency Injection,是指依賴(lài)的對(duì)象不需要手動(dòng)調(diào)用 setXX 方法去設(shè)置,而是通過(guò)配置賦值。
  • 面向切面編程:Aspect Oriented Programming——AOP
  • 容器:Spring 是一個(gè)容器,因?yàn)樗⑶夜芾響?yīng)用對(duì)象的生命周期
  • 組件化:Spring 實(shí)現(xiàn)了使用簡(jiǎn)單的組件配置組合成一個(gè)復(fù)雜的應(yīng)用。在 Spring 中可以使用XML和Java注解組合這些對(duì)象。
  • 一站式:在 IOC 和 AOP 的基礎(chǔ)上可以整合各種企業(yè)應(yīng)用的開(kāi)源框架和優(yōu)秀的第三方類(lèi)庫(kù)(實(shí)際上 Spring 自身也提供了表現(xiàn)層的 SpringMVC 和持久層的 Spring JDBC)

使用 Spring 框架的好處

下面列出的是使用 Spring 框架主要的好處:

  • Spring 可以使開(kāi)發(fā)人員使用 POJOs 開(kāi)發(fā)企業(yè)級(jí)的應(yīng)用程序。只使用 POJOs 的好處是你不需要一個(gè) EJB 容器產(chǎn)品,比如一個(gè)應(yīng)用程序服務(wù)器,但是你可以選擇使用一個(gè)健壯的 servlet 容器,比如 Tomcat 或者一些商業(yè)產(chǎn)品。
  • Spring 在一個(gè)單元模式中是有組織的。即使包和類(lèi)的數(shù)量非常大,你只要擔(dān)心你需要的,而其它的就可以忽略了。
  • Spring 不會(huì)讓你白費(fèi)力氣做重復(fù)工作,它真正的利用了一些現(xiàn)有的技術(shù),像 ORM 框架、日志框架、JEE、Quartz 和 JDK 計(jì)時(shí)器,其他視圖技術(shù)。
  • 測(cè)試一個(gè)用 Spring 編寫(xiě)的應(yīng)用程序很容易,因?yàn)榄h(huán)境相關(guān)的代碼被移動(dòng)到這個(gè)框架中。此外,通過(guò)使用 JavaBean-style POJOs,它在使用依賴(lài)注入注入測(cè)試數(shù)據(jù)時(shí)變得更容易。
  • Spring 的 web 框架是一個(gè)設(shè)計(jì)良好的 web MVC 框架,它為比如 Structs 或者其他工程上的或者不怎么受歡迎的 web 框架提供了一個(gè)很好的供替代的選擇。MVC 模式導(dǎo)致應(yīng)用程序的不同方面(輸入邏輯,業(yè)務(wù)邏輯和UI邏輯)分離,同時(shí)提供這些元素之間的松散耦合。模型(Model)封裝了應(yīng)用程序數(shù)據(jù),通常它們將由 POJO 類(lèi)組成。視圖(View)負(fù)責(zé)渲染模型數(shù)據(jù),一般來(lái)說(shuō)它生成客戶(hù)端瀏覽器可以解釋 HTML 輸出??刂破?Controller)負(fù)責(zé)處理用戶(hù)請(qǐng)求并構(gòu)建適當(dāng)?shù)哪P停⑵鋫鬟f給視圖進(jìn)行渲染。
  • Spring 對(duì) JavaEE 開(kāi)發(fā)中非常難用的一些 API(JDBC、JavaMail、遠(yuǎn)程調(diào)用等),都提供了封裝,使這些API應(yīng)用難度大大降低。
  • 輕量級(jí)的 IOC 容器往往是輕量級(jí)的,例如,特別是當(dāng)與 EJB 容器相比的時(shí)候。這有利于在內(nèi)存和 CPU 資源有限的計(jì)算機(jī)上開(kāi)發(fā)和部署應(yīng)用程序。
  • Spring 提供了一致的事務(wù)管理接口,可向下擴(kuò)展到(使用一個(gè)單一的數(shù)據(jù)庫(kù),例如)本地事務(wù)并擴(kuò)展到全局事務(wù)(例如,使用 JTA)。

依賴(lài)注入(DI)

Spring 最認(rèn)同的技術(shù)是控制反轉(zhuǎn)的依賴(lài)注入(DI)模式??刂品崔D(zhuǎn)(IoC)是一個(gè)通用的概念,它可以用許多不同的方式去表達(dá),依賴(lài)注入僅僅是控制反轉(zhuǎn)的一個(gè)具體的例子。

當(dāng)編寫(xiě)一個(gè)復(fù)雜的 Java 應(yīng)用程序時(shí),應(yīng)用程序類(lèi)應(yīng)該盡可能的獨(dú)立于其他的 Java 類(lèi)來(lái)增加這些類(lèi)可重用可能性,當(dāng)進(jìn)行單元測(cè)試時(shí),可以使它們獨(dú)立于其他類(lèi)進(jìn)行測(cè)試。依賴(lài)注入(或者有時(shí)被稱(chēng)為配線(xiàn))有助于將這些類(lèi)粘合在一起,并且在同一時(shí)間讓它們保持獨(dú)立。

到底什么是依賴(lài)注入?讓我們將這兩個(gè)詞分開(kāi)來(lái)看一看。這里將依賴(lài)關(guān)系部分轉(zhuǎn)化為兩個(gè)類(lèi)之間的關(guān)聯(lián)。例如,類(lèi) A 依賴(lài)于類(lèi) B?,F(xiàn)在,讓我們看一看第二部分,注入。所有這一切都意味著類(lèi) B 將通過(guò) IoC 被注入到類(lèi) A 中。

依賴(lài)注入可以以向構(gòu)造函數(shù)傳遞參數(shù)的方式發(fā)生,或者通過(guò)使用 setter 方法 post-construction。由于依賴(lài)注入是 Spring 框架的核心部分,所以我將在一個(gè)單獨(dú)的章節(jié)中利用很好的例子去解釋這一概念。

面向切面的程序設(shè)計(jì)(AOP):

Spring 框架的一個(gè)關(guān)鍵組件是面向切面的程序設(shè)計(jì)(AOP)框架。一個(gè)程序中跨越多個(gè)點(diǎn)的功能被稱(chēng)為橫切關(guān)注點(diǎn),這些橫切關(guān)注點(diǎn)在概念上獨(dú)立于應(yīng)用程序的業(yè)務(wù)邏輯。有各種各樣常見(jiàn)的很好的關(guān)于方面的例子,比如日志記錄、聲明性事務(wù)、安全性,和緩存等等。

在 OOP 中模塊化的關(guān)鍵單元是類(lèi),而在 AOP 中模塊化的關(guān)鍵單元是方面。AOP 幫助你將橫切關(guān)注點(diǎn)從它們所影響的對(duì)象中分離出來(lái),然而依賴(lài)注入幫助你將你的應(yīng)用程序?qū)ο髲谋舜酥蟹蛛x出來(lái)。

Spring 框架的 AOP 模塊提供了面向方面的程序設(shè)計(jì)實(shí)現(xiàn),可以定義諸如方法攔截器和切入點(diǎn)等,從而使實(shí)現(xiàn)功能的代碼徹底的解耦出來(lái)。使用源碼級(jí)的元數(shù)據(jù),可以用類(lèi)似于 .Net 屬性的方式合并行為信息到代碼中。我將在一個(gè)獨(dú)立的章節(jié)中討論更多關(guān)于 Spring AOP 的概念。

Spring 框架具有以下幾個(gè)特點(diǎn):

1)方便解耦,簡(jiǎn)化開(kāi)發(fā)

Spring 就是一個(gè)大工廠,可以將所有對(duì)象的創(chuàng)建和依賴(lài)關(guān)系的維護(hù)交給 Spring 管理。

2)方便集成各種優(yōu)秀框架

Spring 不排斥各種優(yōu)秀的開(kāi)源框架,其內(nèi)部提供了對(duì)各種優(yōu)秀框架(如 Struts2、Hibernate、MyBatis 等)的直接支持。

3)降低 Java EE API 的使用難度

Spring 對(duì) Java EE 開(kāi)發(fā)中非常難用的一些 API(JDBC、JavaMail、遠(yuǎn)程調(diào)用等)都提供了封裝,使這些 API 應(yīng)用的難度大大降低。

4)方便程序的測(cè)試

Spring 支持 JUnit4,可以通過(guò)注解方便地測(cè)試 Spring 程序。

5)AOP 編程的支持

Spring 提供面向切面編程,可以方便地實(shí)現(xiàn)對(duì)程序進(jìn)行權(quán)限攔截和運(yùn)行監(jiān)控等功能。

6)聲明式事務(wù)的支持

只需要通過(guò)配置就可以完成對(duì)事務(wù)的管理,而無(wú)須手動(dòng)編程。


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)