Spring 是最受歡迎的企業(yè)級 Java 應(yīng)用程序開發(fā)框架。數(shù)以百萬的來自世界各地的開發(fā)人員使用 Spring 框架來創(chuàng)建好性能、易于測試、可重用的代碼。
Spring 框架是一個(gè)開源的 Java 平臺(tái),它最初是由 Rod Johnson 編寫的,并且 2003 年 6 月首次在 Apache 2.0 許可下發(fā)布。
當(dāng)談?wù)摰酱笮『屯该鞫葧r(shí), Spring 是輕量級的。 Spring 框架的基礎(chǔ)版本是在 2 MB 左右的。
Spring 框架的核心特性可以用于開發(fā)任何 Java 應(yīng)用程序,但是在 Java EE 平臺(tái)上構(gòu)建 web 應(yīng)用程序是需要擴(kuò)展的。 Spring 框架的目標(biāo)是使 J2EE 開發(fā)變得更容易使用,通過啟用基于 POJO 編程模型來促進(jìn)良好的編程實(shí)踐。
下面列出的是使用 Spring 框架主要的好處:
Spring 可以使開發(fā)人員使用 POJOs 開發(fā)企業(yè)級的應(yīng)用程序。只使用 POJOs 的好處是你不需要一個(gè) EJB 容器產(chǎn)品,比如一個(gè)應(yīng)用程序服務(wù)器,但是你可以選擇使用一個(gè)健壯的 servlet 容器,比如 Tomcat 或者一些商業(yè)產(chǎn)品。
Spring 在一個(gè)單元模式中是有組織的。即使包和類的數(shù)量非常大,你必須并且只需要但是你需要的,而忽略剩余的那部分。
Spring 不會(huì)讓你白費(fèi)力氣做重復(fù)工作,它真正的利用了一些現(xiàn)有的技術(shù),像幾個(gè) ORM 框架、日志框架、JEE、Quartz 和 JDK 計(jì)時(shí)器,其他視圖技術(shù)。
測試一個(gè)用 Spring 編寫的應(yīng)用程序很容易,因?yàn)?environment-dependent 代碼被放進(jìn)了這個(gè)框架中。此外,通過使用 JavaBean-style POJOs,它在使用依賴注入注入測試數(shù)據(jù)時(shí)變得更容易。
Spring 的 web 框架是一個(gè)設(shè)計(jì)良好的 web MVC 框架,它為 web 框架,比如 Structs 或者其他工程上的或者很少受歡迎的 web 框架,提供了一個(gè)很好的供替代的選擇。
為將特定技術(shù)的異常(例如,由 JDBC、Hibernate,或者 JDO 拋出的異常)翻譯成一致的, Spring 提供了一個(gè)方便的 API,而這些都是未經(jīng)檢驗(yàn)的異常。
輕量級的 IOC 容器往往是輕量級的,例如,特別是當(dāng)與 EJB 容器相比的時(shí)候。這有利于在內(nèi)存和 CPU 資源有限的計(jì)算機(jī)上開發(fā)和部署應(yīng)用程序。
Spring 最認(rèn)同的技術(shù)是控制反轉(zhuǎn)的依賴注入(DI)模式??刂品崔D(zhuǎn)(IoC)是一個(gè)通用的概念,它可以用許多不同的方式去表達(dá),依賴注入僅僅是控制反轉(zhuǎn)的一個(gè)具體的例子。
當(dāng)編寫一個(gè)復(fù)雜的 Java 應(yīng)用程序時(shí),應(yīng)用程序類應(yīng)該盡可能的獨(dú)立于其他的 Java 類來增加這些類可重用額可能性,當(dāng)進(jìn)行單元測試時(shí),可以使它們獨(dú)立于其他類進(jìn)行測試。依賴注入(或者有時(shí)被稱為配線)有助于將這些類粘合在一起,并且在同一時(shí)間讓它們保持獨(dú)立。
到底什么是依賴注入?讓我們將這兩個(gè)詞分開來看一看。這里將依賴關(guān)系部分轉(zhuǎn)化為兩個(gè)類之間的關(guān)聯(lián)。例如,類 A 依賴于類 B。現(xiàn)在,讓我們看一看第二部分,注入。所有這一切都意味著類 B 將通過 IoC 被注入到類 A 中。
依賴注入可以以向構(gòu)造函數(shù)傳遞參數(shù)的方式發(fā)生,或者通過使用 setter 方法 post-construction。由于依賴注入是 Spring 框架的核心部分,所以我將在一個(gè)單獨(dú)的章節(jié)中利用很好的例子去解釋這一概念。
Spring 框架的一個(gè)關(guān)鍵組件是面向方面的程序設(shè)計(jì)(AOP)框架。一個(gè)程序中跨越多個(gè)點(diǎn)的功能被稱為橫切關(guān)注點(diǎn),這些橫切關(guān)注點(diǎn)在概念上獨(dú)立于應(yīng)用程序的業(yè)務(wù)邏輯。有各種各樣常見的很好的關(guān)于方面的例子,比如日志記錄、聲明性事務(wù)、安全性,和緩存等等。
在 OOP 中模塊化的關(guān)鍵單元是類,而在 AOP 中模塊化的關(guān)鍵單元是方面。AOP 幫助你將橫切關(guān)注點(diǎn)從它們所影響的對象中分離出來,然而依賴注入幫助你將你的應(yīng)用程序?qū)ο髲谋舜酥蟹蛛x出來。
Spring 框架的 AOP 模塊提供了面向方面的程序設(shè)計(jì)實(shí)現(xiàn),允許你定義攔截器方法和切入點(diǎn),可以實(shí)現(xiàn)將應(yīng)該被分開的代碼干凈的分開功能。我將在一個(gè)獨(dú)立的章節(jié)中討論更多關(guān)于 Spring AOP 的概念。