第⼀部分 Spring 概述
第1節 Spring 簡介
Spring 是分層的 full-stack(全棧) 輕量級開源框架,以 IoC 和 AOP 爲內核,提供了展示層 SpringMVC 和業務層事務管理等衆多的企業級應⽤技術,還能整合開源世界衆多著名的第三⽅框架和類庫,已經成爲使⽤最多的 Java EE 企業應⽤開源框架。
Spring 官⽅⽹址:http://spring.io/
咱們常常說的 Spring 其實指的是Spring Framework(spring 框架)。
第2節 Spring 發展歷程
1997年 IBM 提出了EJB的思想;1998年,SUN 制定開發標準規範EJB1.0;
1999年,EJB 1.1發佈; 2001年,EJB 2.0發佈; 2003年,EJB 2.1發佈; 2006年,EJB 3.0發佈;
Rod Johnson(spring之⽗)Expert One-to-One J2EE Design and Development(2002)闡述了J2EE使⽤EJB開發設計的優勢及解決⽅案Expert One-to-One J2EE Development without EJB(2004) 闡述了J2EE開發不使⽤EJB的解決⽅式(Spring雛形)
2017 年 9 ⽉份發佈了 Spring 的最新版本 Spring 5.0 通⽤版(GA)
第3節 Spring 的優點
整個 Spring 優點,傳達出⼀個信號,Spring 是⼀個綜合性,且有很強的思想性框架,每學習⼀天,就能體會到它的⼀些優點。br/>一、⽅便解耦,簡化開發
經過Spring提供的IoC容器,能夠將對象間的依賴關係交由Spring進⾏控制,避免硬編碼所形成的過分程序耦合。⽤戶也沒必要再爲單例模式類、屬性⽂件解析等這些很底層的需求編寫代碼,能夠更專一於上層的應⽤。
二、AOP編程的⽀持
經過Spring的AOP功能,⽅便進⾏⾯向切⾯的編程,許多不容易⽤傳統OOP實現的功能能夠經過AOP輕鬆應付。
聲明式事務的⽀持
三、@Transactional
能夠將咱們從單調煩悶的事務管理代碼中解脫出來,經過聲明式⽅式靈活的進⾏事務的管理,提⾼開發效率和質量。
⽅便程序的測試
能夠⽤⾮容器依賴的編程⽅式進⾏⼏乎全部的測試⼯做,測試再也不是昂貴的操做,⽽是隨⼿可作的事情。
四、⽅便集成各類優秀框架
Spring能夠下降各類框架的使⽤難度,提供了對各類優秀框架(Struts、Hibernate、Hessian、Quartz等)的直接⽀持。
五、下降JavaEE API的使⽤難度
Spring對JavaEE API(如JDBC、JavaMail、遠程調⽤等)進⾏了薄薄的封裝層,使這些API的使⽤難度⼤爲下降。
六、源碼是經典的 Java 學習範例
Spring的源代碼設計精妙、結構清晰、匠⼼獨⽤,到處體現着⼤師對Java設計模式靈活運⽤以及對Java技術的⾼深造詣。它的源代碼⽆意是Java技術的最佳實踐的範例。
第4節 Spring 的核⼼結構
Spring是⼀個分層⾮常清晰而且依賴關係、職責定位⾮常明確的輕量級框架,主要包括⼏個⼤模塊:數據處理模塊、Web模塊、AOP(Aspect Oriented Programming)/Aspects模塊、Core Container模塊和 Test 模塊,以下圖所示,Spring依靠這些基本模塊,實現了⼀個令⼈愉悅的融合了現有解決⽅案的零侵⼊的輕量級框架。
Spring核⼼容器(Core Container) 容器是Spring框架最核⼼的部分,它管理着Spring應⽤中bean的建立、配置和管理。在該模塊中,包括了Spring bean⼯⼚,它爲Spring提供了DI的功能。基於bean⼯⼚,咱們還會發現有多種Spring應⽤上下⽂的實現。全部的Spring模塊都構建於核⼼容器之上。
⾯向切⾯編程(AOP)/Aspects Spring對⾯向切⾯編程提供了豐富的⽀持。這個模塊是Spring應⽤系統中開發切⾯的基礎,與DI⼀樣,AOP能夠幫助應⽤對象解耦。
數據訪問與集成(Data Access/Integration)
Spring的JDBC和DAO模塊封裝了⼤量樣板代碼,這樣可使得數據庫代碼變得簡潔,也能夠更專一於咱們的業務,還能夠避免數據庫資源釋放失敗⽽引發的問題。另外,Spring AOP爲數據訪問提供了事務管理服務,同時Spring還對ORM進⾏了集成,如Hibernate、MyBatis等。該模塊由JDBC、Transactions、ORM、OXM 和 JMS 等模塊組成。
Web 該模塊提供了SpringMVC框架給Web應⽤,還提供了多種構建和其它應⽤交互的遠程調⽤⽅案。SpringMVC框架在Web層提高了應⽤的鬆耦合⽔平。
Test 爲了使得開發者可以很⽅便的進⾏測試,Spring提供了測試模塊以至⼒於Spring應⽤的測試。經過該模塊,Spring爲使⽤Servlet、JNDI等編寫單元測試提供了⼀系列的mock對象實現。
第5節 Spring 框架版本
Spring Framework不一樣版本對 Jdk 的要求
JDK 11.0.5
IDE idea 2019
Maven 3.6.x
第⼆部分 核⼼思想
注意:IOC和AOP不是spring提出的,在spring以前就已經存在,只不過更偏向於理論化,spring在技術層次把這兩個思想作了⾮常好的實現(Java)
第1節 IoC
1.1 什麼是IoC?
一、IoC Inversion of Control (控制反轉/反轉控制),注意它是⼀個技術思想,不是⼀個技術實現描述的事情:Java開發領域對象的建立,管理的問題
二、傳統開發⽅式:⽐如類A依賴於類B,每每會在類A中new⼀個B的對象
三、IoC思想下開發⽅式:咱們不⽤⾃⼰去new對象了,⽽是由IoC容器(Spring框架)去幫助咱們實例化對象而且管理它,咱們須要使⽤哪一個對象,去問IoC容器要便可
四、咱們喪失了⼀個權利(建立、管理對象的權利),獲得了⼀個福利(不⽤考慮對象的建立、管理等⼀系列事情)
五、爲何叫作控制反轉?控制:指的是對象建立(實例化、管理)的權利反轉:控制權交給外部環境了(spring框架、IoC容器)
1.2 IoC解決了什麼問題
IoC解決對象之間的耦合問題
1.3 IoC和DI的區別
DI:Dependancy Injection(依賴注⼊)
怎麼理解:
IOC和DI描述的是同⼀件事情,只不過⻆度不⼀樣罷了
第2節 AOP
2.1 什麼是AOP
AOP: Aspect oriented Programming ⾯向切⾯編程/⾯向⽅⾯編程
AOP是OOP的延續,從OOP提及
OOP三⼤特徵:封裝、繼承和多態
oop是⼀種垂直繼承體系
OOP編程思想能夠解決⼤多數的代碼重複問題,可是有⼀些狀況是處理不了的,⽐以下⾯的在頂級⽗類Animal中的多個⽅法中相同位置出現了重複代碼,OOP就解決不了
橫切邏輯代碼
橫切邏輯代碼存在什麼問題:
橫切代碼重複問題
橫切邏輯代碼和業務代碼混雜在⼀起,代碼臃腫,維護不⽅便AOP出場,AOP獨闢蹊徑提出橫向抽取機制,將橫切邏輯代碼和業務邏輯代碼分析
代碼拆分容易,那麼如何在不改變原有業務邏輯的狀況下,悄⽆聲息的把橫切邏輯代碼應⽤到原有的業務邏輯中,達到和原來⼀樣的效果,這個是⽐較難的
2.2 AOP
在解決什麼問題在不改變原有業務邏輯狀況下,加強橫切邏輯代碼,根本上解耦合,避免橫切邏輯代碼重複
2.3 爲何叫作⾯向切⾯編程
「切」:指的是橫切邏輯,原有業務邏輯代碼咱們不能動,只能操做橫切邏輯代碼,因此⾯向橫切邏輯
「⾯」:橫切邏輯代碼每每要影響的是不少個⽅法,每⼀個⽅法都如同⼀個點,多個點構成⾯,有⼀個⾯的概念在⾥⾯
以上文章只是Spring高級源碼中的一部分,須要的能夠關注公衆號:Java故事程序員,後臺私信【電子書】獲取完整版的《Spring高級源碼》!
若是本文對你有幫助,別忘記來個三連:點贊,轉發,評論。我們下期見!程序員