1. 程式人生 > >十年架構師詳解,Spring-IoC容器裝配Bean

十年架構師詳解,Spring-IoC容器裝配Bean

十年架構師詳解,Spring-IoC容器裝配Bean

 

先看一下Spring容器內部是如何協助的,也就是Spring容器、Bean的配置資訊、Bean的實現類及應用程式之間的關係,如下圖

 

十年架構師詳解,Spring-IoC容器裝配Bean

 

 

由上圖我們看到,一個Bean從建立到被程式使用經歷了四個階段。本文主要講解Bean在Spring中的裝配。裝配方式主要分為如下幾種。

1. 基於XML的配置

十年架構師詳解,Spring-IoC容器裝配Bean

 

1.1 依賴注入

依賴注入分為幾種方式:屬性注入、建構函式注入、工廠方法注入

屬性注入:

十年架構師詳解,Spring-IoC容器裝配Bean

 

建構函式注入:

十年架構師詳解,Spring-IoC容器裝配Bean

 

工廠方法注入:

十年架構師詳解,Spring-IoC容器裝配Bean

 

1.2 方法注入(主要是lookup方法注入)

Spring IoC容器擁有複寫Bean方法的能力,這項魔術般的能力主要歸功於CGLib類包。CGLib可以在執行期動態操作Class位元組碼,為Bean動態建立子類或實現類。

1.3 Bean的作用域

十年架構師詳解,Spring-IoC容器裝配Bean

 

注意劃重點:

1. 為什麼Spring把Bean的預設作用域定為singleton

Spring對單例模式進行了超越,在傳統開發中,由於DAO類持有Connection這個非執行緒安全的變數,因此往往未採用單例模式。而在Spring環境中,對於所有的DAO都採用單例模式,因為Spring利用AOP和LocalThread功能,對非執行緒安全的變數進行了特殊處理,使這些非執行緒安全的類變成了執行緒安全的類。因為Spring的這一超越,所以在實際應用中都能以單例項的方式執行,這也就是為什麼Spring把Bean的預設作用域定位singleton的原因。

架構社群:142019080

2. 基於註解的配置

十年架構師詳解,Spring-IoC容器裝配Bean

 

除了@Component,Spring還提供了3個功能基本和@Component等效的註解,分別用於對DAO、Service、及Web層的Controller進行註解

@Repository:用於對DAO實現類進行標註

@Service:用於對Service實現類進行標註

@Controller:用於對Controller實現類進行標註

2.1 自動裝配Bean

2.1.1 使用@Autowired進行自動注入

十年架構師詳解,Spring-IoC容器裝配Bean

 

2.1.2. 使用@Autowired的required屬性,預設情況下,required是true,找不到匹配的bean,則會報錯,使用required=false,則不會報錯

十年架構師詳解,Spring-IoC容器裝配Bean

 

2.1.3. 使用@Qualifier指定注入Bean的名稱,假設容器中有兩個型別為UserDao的Bean,一個名字為userDao,另一個名字為otherUserDao,則下面的程式碼則使用userDao的Bean.

十年架構師詳解,Spring-IoC容器裝配Bean

 

2.1.4. 對類方法進行標註

十年架構師詳解,Spring-IoC容器裝配Bean

 

2.1.5. 對集合類進行標註(劃重點)

對於一個Service有多個實現類,我們應該如何去注入,並且使用,用集合類進行標註就可以。

十年架構師詳解,Spring-IoC容器裝配Bean

 

十年架構師詳解,Spring-IoC容器裝配Bean

 

2.1.6. 對延遲依賴注入的支援

十年架構師詳解,Spring-IoC容器裝配Bean

 

注意:使用@Lazy需要同時標註在屬性及目標Bean上,二者缺一不可

架構社群:142019080

2.2 Bean的作用範圍及生命過程方法

十年架構師詳解,Spring-IoC容器裝配Bean

 

雖然Bean在Spring中預設的載入方式是singleton,但是可以通過上面的方式修改。

配置Bean的生命週期過程註解

十年架構師詳解,Spring-IoC容器裝配Bean

 

啟動容器與銷燬容器:

十年架構師詳解,Spring-IoC容器裝配Bean

 

我們看下列印是什麼

十年架構師詳解,Spring-IoC容器裝配Bean

 

3. 基於Java類的配置

十年架構師詳解,Spring-IoC容器裝配Bean

 

啟動:

十年架構師詳解,Spring-IoC容器裝配Bean

 

4. 基於Groovy DSL的配置(不做過多敘述)

5. 通過編碼方式動態的新增Bean(不做過多敘述)

6. 不同配置方式的比較

十年架構師詳解,Spring-IoC容器裝配Bean

 

十年架構師詳解,Spring-IoC容器裝配Bean

 

7. Bean不同配置方式的使用場景

十年架構師詳解,Spring-IoC容器裝配Bean

加架構社群:142019080領取資料,裡面會分享一些資深架構師錄製的視訊錄影:有Spring,MyBatis,Netty原始碼分析,高併發、高效能、分散式、微服務架構的原理,JVM效能優化這些成為架