寫在Spring之前
目前Spring體系已經(jīng)發(fā)展到spring boot绪抛,單純的spring core已經(jīng)稍顯過時像屋,但是作為一個經(jīng)典和奠基怕犁,不得不說學習Spring core讓你知道Spring體系的過去,也更能讓你理解未來己莺。
在此感謝整理開發(fā)文檔的作者奏甫,本文參考和引用如下:
spring core tutorial:https://www.tutorialspoint.com/spring/index.htm
spring 教程w3c:https://www.w3cschool.cn/wkspring/
spring framework 是一個開源的java平臺,它提供了豐富的構(gòu)架凌受,用以支撐非常簡單和快速地開發(fā)出一個健壯的Java應(yīng)用阵子。它最初是由 Rod Johnson 編寫的,并且于 2003 年 6 月首次在 Apache 2.0 許可下發(fā)布胜蛉。本片教程是基于spring framework 4.1.6版本挠进,2015/03 發(fā)布。大部分內(nèi)容具有向后兼容性誊册,還有少數(shù)內(nèi)容可能隨高級版本變動领突,具體請查看version change。
適用對象
本教程是為需要詳細了解 Spring 框架的體系結(jié)構(gòu)和實際應(yīng)用的 Java 程序員設(shè)計的解虱。本教程將帶你達到中級的專業(yè)知識水平攘须,而你可以將自己提升至更高層次的專業(yè)知識水平。
準備知識
在進行本教程之前,你應(yīng)該對 Java 編程語言有一個很好的了解于宙。對 IDE 的基本了解也是必須的浮驳,因為所有的示例都可用 Eclipse或者Intellij idea IDE 進行編譯的。
Q&A
https://www.tutorialspoint.com/spring/spring_questions_answers.htm
概述
Spring 是最受歡迎的企業(yè)級 Java 應(yīng)用程序開發(fā)框架捞魁,數(shù)以百萬的來自世界各地的開發(fā)人員使用 Spring 框架來創(chuàng)建性能好至会、易于測試、可重用的代碼谱俭。
Spring 框架是一個開源的 Java 平臺奉件,它最初是由 Rod Johnson 編寫的,并且于 2003 年 6 月首次在 Apache 2.0 許可下發(fā)布昆著。
Spring 是輕量級的框架县貌,其基礎(chǔ)版本只有 2 MB 左右的大小。
Spring 框架的核心特性是可以用于開發(fā)任何 Java 應(yīng)用程序凑懂,但是在 Java EE 平臺上構(gòu)建 web 應(yīng)用程序是需要擴展的煤痕。 Spring 框架的目標是使 J2EE 開發(fā)變得更容易使用,通過啟用基于 POJO 編程模型來促進良好的編程實踐接谨。
使用 Spring 框架的好處
下面列出的是使用 Spring 框架主要的好處:
Spring 可以使開發(fā)人員使用 POJOs 開發(fā)企業(yè)級的應(yīng)用程序摆碉。只使用 POJOs 的好處是你不需要一個 EJB 容器產(chǎn)品,比如一個應(yīng)用程序服務(wù)器脓豪,但是你可以選擇使用一個健壯的 servlet 容器巷帝,比如 Tomcat 或者一些商業(yè)產(chǎn)品。
Spring 在一個單元模式中是有組織的扫夜。即使包和類的數(shù)量非常大楞泼,你只要擔心你需要的,而其它的就可以忽略了历谍。
Spring 不會讓你白費力氣做重復(fù)工作现拒,它真正的利用了一些現(xiàn)有的技術(shù),像ORM 框架望侈、日志框架印蔬、JEE、Quartz 和 JDK 計時器脱衙,其他視圖技術(shù)侥猬。
測試一個用 Spring 編寫的應(yīng)用程序很容易,因為環(huán)境相關(guān)的代碼被移動到這個框架中捐韩。此外退唠,通過使用 JavaBean-style POJOs,它在使用依賴注入注入測試數(shù)據(jù)時變得更容易荤胁。
-
Spring 的 web 框架是一個設(shè)計良好的 web MVC 框架瞧预,它為比如 Structs 或者其他工程上的或者不怎么受歡迎的 web 框架提供了一個很好的供替代的選擇。MVC模式導(dǎo)致應(yīng)用程序的不同方面(輸入邏輯,業(yè)務(wù)邏輯和UI邏輯)分離垢油,同時提供這些元素之間的松散耦合盆驹。
- 模型(Model)封裝了應(yīng)用程序數(shù)據(jù),通常它們將由POJO類組成滩愁。
- 視圖(View)負責渲染模型數(shù)據(jù)躯喇,一般來說它生成客戶端瀏覽器可以解釋HTML輸出。
- 控制器(Controller)負責處理用戶請求并構(gòu)建適當?shù)哪P拖跬鳎⑵鋫鬟f給視圖進行渲染廉丽。
Spring 對JavaEE開發(fā)中非常難用的一些API(JDBC、JavaMail妻味、遠程調(diào)用等)正压,都提供了封裝,使這些API應(yīng)用難度大大降低弧可。
輕量級的 IOC 容器往往是輕量級的蔑匣,例如,特別是當與 EJB 容器相比的時候棕诵。這有利于在內(nèi)存和 CPU 資源有限的計算機上開發(fā)和部署應(yīng)用程序。
Spring提供了一致的事務(wù)管理接口凿将,可向下擴展到(使用一個單一的數(shù)據(jù)庫校套,例如)本地事務(wù)并擴展到全局事務(wù)(例如,使用 JTA)牧抵。
依賴注入(DI)
Spring 最認同的技術(shù)是控制反轉(zhuǎn)的依賴注入(DI)模式笛匙。控制反轉(zhuǎn)(IoC)是一個通用的概念犀变,它可以用許多不同的方式去表達妹孙,依賴注入僅僅是控制反轉(zhuǎn)的一個具體的例子。
當編寫一個復(fù)雜的 Java 應(yīng)用程序時获枝,應(yīng)用程序類應(yīng)該盡可能的獨立于其他的 Java 類來增加這些類可重用可能性蠢正,當進行單元測試時,可以使它們獨立于其他類進行測試省店。依賴注入(或者有時被稱為配線)有助于將這些類粘合在一起嚣崭,并且在同一時間讓它們保持獨立。
到底什么是依賴注入懦傍?讓我們將這兩個詞分開來看一看雹舀。這里將依賴關(guān)系部分轉(zhuǎn)化為兩個類之間的關(guān)聯(lián)。例如粗俱,類 A 依賴于類 B∷涤埽現(xiàn)在,讓我們看一看第二部分,注入签财。所有這一切都意味著類 B 將通過 IoC 被注入到類 A 中串慰。
依賴注入可以以向構(gòu)造函數(shù)傳遞參數(shù)的方式發(fā)生,或者通過使用 setter 方法 post-construction荠卷。由于依賴注入是 Spring 框架的核心部分模庐,所以我將在一個單獨的章節(jié)中利用很好的例子去解釋這一概念。
面向方面的程序設(shè)計(AOP):
Spring 框架的一個關(guān)鍵組件是面向方面的程序設(shè)計(AOP)框架油宜。一個程序中跨越多個點的功能被稱為橫切關(guān)注點掂碱,這些橫切關(guān)注點在概念上獨立于應(yīng)用程序的業(yè)務(wù)邏輯。有各種各樣常見的很好的關(guān)于方面的例子慎冤,比如日志記錄疼燥、聲明性事務(wù)、安全性蚁堤,和緩存等等醉者。
在 OOP 中模塊化的關(guān)鍵單元是類,而在 AOP 中模塊化的關(guān)鍵單元是方面披诗。AOP 幫助你將橫切關(guān)注點從它們所影響的對象中分離出來撬即,然而依賴注入幫助你將你的應(yīng)用程序?qū)ο髲谋舜酥蟹蛛x出來。
Spring 框架的 AOP 模塊提供了面向方面的程序設(shè)計實現(xiàn)呈队,可以定義諸如方法攔截器和切入點等剥槐,從而使實現(xiàn)功能的代碼徹底的解耦出來。使用源碼級的元數(shù)據(jù)宪摧,可以用類似于.Net屬性的方式合并行為信息到代碼中粒竖。Spring AOP