Java開發學習(一)----初識Spring及其核心概念
一、 Spring系統架構
1.1 系統架構圖
-
Spring Framework是Spring生態圈中最基礎的項目,是其他項目的根基。
-
Spring Framework的發展也經歷了很多版本的變更,每個版本都有相應的調整

-
Spring Framework的5版本目前沒有最新的架構圖,而最新的是4版本,所以接下來主要研究的是4的架構圖

(1)核心層
-
Core Container:核心容器,這個模組是Spring最核心的模組,其他的都需要依賴該模組
(2)AOP層
-
AOP:面向切面編程,它依賴核心層容器,目的是
在不改變原有程式碼的前提下對其進行功能增強 -
Aspects:AOP是思想,Aspects是對AOP思想的具體實現
(3)數據層
-
Data Access:數據訪問,Spring全家桶中有對數據訪問的具體實現技術
-
Data Integration:數據集成,Spring支援整合其他的數據層解決方案,比如Mybatis
-
Transactions:事務,Spring中事務管理是Spring AOP的一個具體實現
(4)Web層
-
具體體現在SpringMVC框架
(5)Test層
-
Spring主要整合了Junit來完成單元測試和集成測試
-
二、Spring核心概念
在Spring核心概念這部分內容中主要包含IOC/DI、IOC容器和Bean,那麼問題就來了,這些都是什麼呢?
2.1 目前項目中的問題
要想解答這個問題,就需要先分析下目前咱們程式碼在編寫過程中遇到的問題:

(1)業務層需要調用數據層的方法,就需要在業務層new數據層的對象
(2)如果數據層的實現類發生變化,那麼業務層的程式碼也需要跟著改變,發生變更後,都需要進行編譯打包和重部署
(3)所以,現在程式碼在編寫的過程中存在的問題是:耦合度偏高
針對這個問題,該如何解決呢?

我們就想,如果能把框中的內容給去掉,不就可以降低依賴了么,但是又會引入新的問題,去掉以後程式能運行么?
答案肯定是不行,因為bookDao沒有賦值為Null,強行運行就會出空指針(NPE)異常。
所以現在的問題就是,業務層不想new對象,運行的時候又需要這個對象,該咋辦呢?
針對這個問題,Spring就提出了一個解決方案:
-
使用對象時,在程式中不要主動使用new產生對象,轉換為由
外部提供對象。這種實現思就是Spring的一個核心概念(IOC)
2.2 IOC、IOC容器、Bean、DI
-
IOC(Inversion of Control)控制反轉
(1)什麼是控制反轉呢?
-
使用對象時,由主動new產生對象轉換為由
外部提供對象,此過程中對象創建控制權由程式轉移到外部,此思想稱為控制反轉。-
業務層要用數據層的類對象,以前是自己
new的 -
現在自己不new了,交給
別人[外部]來創建對象 -
別人[外部]就反轉控制了數據層對象的創建權 -
這種思想就是控制反轉
-
別人[外部]指定是什麼呢?
-
(2)Spring和IOC之間的關係是什麼呢?
-
Spring技術對IOC思想進行了實現
-
Spring提供了一個容器,稱為
IOC容器,用來充當IOC思想中的"外部" -
IOC思想中的
別人[外部]指的就是Spring的IOC容器
(3)IOC容器的作用以及內部存放的是什麼?
-
IOC容器負責對象的創建、初始化等一系列工作,其中包含了數據層和業務層的類對象
-
被創建或被管理的對象在IOC容器中統稱為
Bean -
IOC容器中放的就是一個個的Bean對象
(4)當IOC容器中創建好service和dao對象後,程式能正確執行么?
-
不行,因為service運行需要依賴dao對象
-
IOC容器中雖然有service和dao對象
-
但是service對象和dao對象沒有任何關係
-
需要把dao對象交給service,也就是說要綁定service和dao對象之間的關係
像這種在容器中建立對象與對象之間的綁定關係就要用到DI:
-
DI(Dependency Injection)依賴注入

(1)什麼是依賴注入呢?
-
在容器中建立bean與bean之間的依賴關係的整個過程,稱為依賴注入
-
業務層要用數據層的類對象,以前是自己
new的 -
現在自己不new了,靠
別人[外部其實指的就是IOC容器]來給注入進來 -
這種思想就是依賴注入
-
(2)IOC容器中哪些bean之間要建立依賴關係呢?
-
這個需要程式設計師根據業務需求提前建立好關係,如業務層需要依賴數據層,service就要和dao建立依賴關係
介紹完Spring的IOC和DI的概念後,我們會發現這兩個概念的最終目標就是:充分解耦,具體實現靠:
-
使用IOC容器管理bean(IOC)
-
在IOC容器內將有依賴關係的bean進行關係綁定(DI)
-
最終結果為:使用對象時不僅可以直接從IOC容器中獲取,並且獲取到的bean已經綁定了所有的依賴關係.
2.3 核心概念小結
(1)什麼IOC/DI思想?
-
IOC:控制反轉,控制反轉的是對象的創建權
-
DI:依賴注入,綁定對象與對象之間的依賴關係
(2)什麼是IOC容器?:Spring創建了一個容器用來存放所創建的對象,這個容器就叫IOC容器
(3)什麼是Bean?:容器中所存放的一個個對象就叫Bean或Bean對象



