【Spring】1. Spring概要綜述

在這裏插入圖片描述
雖然此文寫起來簡單但感覺是以後自己進行Spring知識體系構建的根基。此文需配合概述跟核心 閱讀最好。

Spring瞭解

簡而言之Spring是Java目前第一大框架,Spring框架是由於軟件開發的複雜性而創建的,Spring的用途不僅僅限於服務器端的開發。從簡單性、可測試性和松耦合性角度而言,絕大部分Java應用都可以從Spring中受益,Spring是一個全面的解決方案,它堅持一個原則:不從新造輪子。已經有較好解決方案的領域,Spring絕不重複性實現,比如:對象持久化和OR映射,Spring只對現有的JDBC,Hibernate等技術提供支持,使之更容易使用,而不做重複的實現。Spring框架有很多特性,Spring官網給出對Spring提供的功能如下:

Spring make java more simple
Spring make java more modern
Spring make java more reactive
Spring make java more productive
Spring make java more cloud-ready

用人話來說就是

  1. 讓現有的技術更容易使用,
  2. 促進良好的編程習慣。
  3. 大大簡化應用程序的開發。

Spring特性如下:
在這裏插入圖片描述

Spring框架

Spring框架是分模塊存在,除了最核心的Spring Core Container(即Spring容器)是必要模塊之外,其他模塊都是可選,視需要而定。大約有20多個模塊。
在這裏插入圖片描述
一般來說,Spring主要分爲7個模塊:在這裏插入圖片描述
Spring框架有很多特性,這些特性由7個定義良好的模塊構成。
在這裏插入圖片描述

  1. Spring Core:Spring核心,它是框架最基礎的部分,提供IOC和依賴注入特性。
  2. Spring Context:Spring上下文容器,它是BeanFactory功能加強的一個子接口
  3. Spring Web:它提供Web應用開發的支持
  4. Spring MVC:它針對Web應用中MVC思想的實現
  5. Spring DAO:提供對JDBC抽象層,簡化了JDBC編碼,同時,編碼更具有健壯性。
  6. Spring ORM:它支持用於流行的ORM框架的整合,比如:Spring + Hibernate、Spring + iBatis、Spring + JDO的整合等。
  7. Spring AOP:AOP即,面向切面編程,它提供了與AOP聯盟兼容的編程實現。

主要的Jar包如下(借鑑了大佬圖):
在這裏插入圖片描述

Spring優點

Spring提供了良好的代碼組織邏輯跟業務開發流程規範框架,因爲如果我們要實現一個功能,代碼量一般都是固定的,要不我們全自己寫,要不我們用優秀的已經寫好的各種組件,Spring就已經給我們提供了各種優秀組件,主要優點如下:

  1. IOC跟DI的支持

Spring就是一個大工廠(容器),可以將所有對象創建和依賴關係維護,交給Spring管理
spring工廠是用於生成bean,並且管理Bean的生命週期,踐行着高內聚低耦合的設計理念。

  1. AOP編程的支持

Spring提供面向切面編程,可以方便的實現對程序進行權限攔截、運行監控等功能

  1. 聲明式事務的支持

只需要通過配置就可以完成對事務的管理,而無需手動編程,以前重複的一些JDBC操作,統統不需我們再寫了。

  1. 方便程序的測試

Spring對Junit4提供支持,可以通過註解方便的測試Spring程序。

  1. 粘合劑功能

方便集成各種優秀框架,Spring不排斥各種優秀的開源框架,其內部提供了對各種優秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持

  1. 降低JavaEE API的使用難度

Spring 對JavaEE開發中非常難用的一些API(JDBC、JavaMail、遠程調用等),都提供了封裝,使這些API應用難度大大降低

Bean

在Spring中POJO(Plain Ordinary Java Object)簡單的Java對象,實際就是普通JavaBeans。
JavaBean中的這個bean是豆莢的意思,顧名思義,JavaBean設計者的初衷是就是讓這個類體現豆莢的封裝性(豆莢把豌豆都封裝在裏面了)。JavaBean 類也是一個類,只不過這個類有一些特殊的特性而已如下:

1.如果類的成員變量的名字是xxx,那麼爲了更改或獲取成員變量的值,即更改或獲取屬性,在類中可以使用兩個方法:
java getXxx(),用來獲取屬性xxx。 setXxx(),用來修改屬性xxx.。
2. 對於 boolean 類型的成員變量,即布爾邏輯類型的屬性,允許使用"is"代替上面的"get"和"set"。
3. 類中方法的訪問屬性都必須是public的。
4. 類中如果有構造方法,那麼這個構造方法也是public的並且是無參數的(個人感覺沒那麼嚴格)。

說白了JavaBean無非就是面向對象封裝的一種良好體現,比如一般情況下 我們將實現業務的基本單元 比如person、dog等類,擁有年齡,身高,體重等基本屬性。我們將這些基本屬性封裝成一個整體類,然後用邏輯判斷層來處理這樣的整體類。

核心思想

提到Spring永遠離不開的兩個話題就是 IOC跟AOP,先簡單說下這兩個詞的概念:

IOC

SpringIOC核心就是 反射 + xml解析,
IOC容器(Inversion of Controller) 控制反轉,Java思想是面向對象的開發,一個應用程序是由一組對象通過相互協作開發出的業務邏輯組成,那麼如何管理這些對象,使他們高效地協作呢?抽象工廠、工廠方法設計模式”可以幫我們創建對象,生成器模式幫我們處理對象間的依賴關係,不也能完成這些功能嗎?可是這些又需要我們創建另一些工廠類、生成器類,我們又要而外管理這些類,增加了我們的負擔。所以用另外的方式,如果對象需要的時候,就自動地生成對象,不用再去創建。

舉個例子:原來我們餓了,就要自己買各種東西做飯,但是現在有了外賣之後,就可以訂餐了,我們可以把我們的需求告訴美團,讓他們給我們送飯。這裏主導關係發生了變化,原來是我們自己,但是現在是美團。

Spring提出了一種思想:就是由Spring來負責控制對象的生命週期和對象間的關係。所有的類都會在Spring容器中登記,告訴Spring你是個什麼東西,你需要什麼東西,然後Spring會在系統運行到適當的時候,把你要的東西主動給你,同時也把你交給其他需要你的東西。所有的類的創建、銷燬都由spring來控制,也就是說控制對象生存週期的不再是引用它的對象,而是spring。對於某個具體的對象而言,以前是它控制其他對象,現在是所有對象都被spring控制,所以這叫控制反轉,在Spring代碼中很難看到new 對象這樣的操作了。

AOP

AOP(Aspect Oriented Programming)稱爲面向切面編程,有點方法增強的意思。AOP的核心其實就是動態代理。
設想下比如進行一個計算器的編寫,需要實現加減乘除的運算,編寫四種不同的方法。還有另外的兩個需求是在每種運算之前和運算之後需要打印日誌進行記錄,需要進行數字合規的校驗。我們就得考慮如何能簡單地實現呢?

  1. 日誌記錄數據校驗可重用的功能模塊分離出來,然後在程序的執行的合適的地方動態地植入這些代碼並執行。這樣就簡化了代碼的書寫。
    業務邏輯代碼中沒有參和通用邏輯的代碼,業務模塊更簡潔,只包含核心業務代碼。實現了業務邏輯和通用邏輯的代碼分離,便於維護和升級,降低了業務邏輯和通用邏輯的耦合。

Spring通過配置的方式,而且不需要在業務邏輯代碼中添加任何額外代碼,就可以很好地實現上述功能。以上這種方式就是spring中實現的AOP:意思是面向切面編程,提供從另一個角度來考慮程序結構以完善面向對象編程(相對於OOP),在編譯期間、裝載期間或運行期間實現在不修改源代碼的情況下給程序動態添加功能的一種技術。

人話:通俗點說就是把可重用的功能提取出來,然後將這些通用功能在合適的時候織入到應用程序中(以前跟過AOP代碼好像是動態的在內存中組織處切面代碼跟業務代碼融合最終生成可執行代碼);比如安全,日記記錄,這些都是通用的功能,我們可以把它們提取出來,然後在程序執行的合適地方織入這些代碼並執行它們,從而完成需要的功能並複用了這些功能。

發展史

Spring Framework JDK
1.x 1.3:引入了動態代理機制,AOP 底層就是動態代理,所以 Spring 必須是 JDK 1.3
2.x 1.4:正常升級
3.x 5: 引入註解,Spring 3 最低版本是 Java 5 ,從此以後不叫1.x 直接叫x
4.x 6: Spring 4 是有劃時代意義的版本,開始支持 Spring Boot 1.X
5.x 8:lambda 表達式等功能

目前Java 開發的標配: Spring Framwork 5、Spring Boot 2、JDK 8。

參考

Spring官網閱讀
Spring簡單說
Spring思維導圖
Spring學習網站
Spring通俗說

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章