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)
下面列出的是使用 Spring 框架主要的好處:
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é)中利用很好的例子去解釋這一概念。
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è)大工廠,可以將所有對(duì)象的創(chuàng)建和依賴(lài)關(guān)系的維護(hù)交給 Spring 管理。
Spring 不排斥各種優(yōu)秀的開(kāi)源框架,其內(nèi)部提供了對(duì)各種優(yōu)秀框架(如 Struts2、Hibernate、MyBatis 等)的直接支持。
Spring 對(duì) Java EE 開(kāi)發(fā)中非常難用的一些 API(JDBC、JavaMail、遠(yuǎn)程調(diào)用等)都提供了封裝,使這些 API 應(yīng)用的難度大大降低。
Spring 支持 JUnit4,可以通過(guò)注解方便地測(cè)試 Spring 程序。
Spring 提供面向切面編程,可以方便地實(shí)現(xiàn)對(duì)程序進(jìn)行權(quán)限攔截和運(yùn)行監(jiān)控等功能。
只需要通過(guò)配置就可以完成對(duì)事務(wù)的管理,而無(wú)須手動(dòng)編程。
更多建議: