1. 程式人生 > >《 Spring 實戰 》(第4版) 讀書筆記

《 Spring 實戰 》(第4版) 讀書筆記

Pxx  表示在書的第 xx 頁。

Spring 框架的核心是 Spring 容器。

1. (P7.) 構造器注入是依賴注入的方式之一。

緊耦合:在 A 類的無參構造器中直接 new 出一個 B 類。

Spring 鬆耦合:在 A 類中使用有參構造器,把 B 類的超類型別 X 作為構造引數傳入。

這樣不需要 A 類管理 B 類,並且可以根據不同情況傳入不同的實際引數,只是 X 的子類就可以注入到 A 中使用。A

2. (P15) .A 類中有一個 x 方法,B 類有 y ,z 方法。在 x 方法執行前後分別執行 y,z 方法要顯示的寫出呼叫程式碼 。

Spring aop :把 A 類宣告為一個切面。把 A 宣告為一個 bean , 定義切入點 ( 包含 x 方法 ) ,分別配置 y,z 為前置、後置通知。這樣 A 類完全不知情時就已經呼叫執行 B 類的對應方法了。

3. (P34.) 裝配 (wiring):建立應用物件之間協作關係的行為,這也是依賴注入(DI)的本質。

Spring 有三種主要裝配機制:在 xml 中進行顯示配置、在 java 中進行顯示配製、隱式的 bean 發現機制和自動裝配。

Spring  從兩個角度來實現自動化裝配 :

元件掃描 (component scanning)- Spring 會自動發現應用上下文中所建立的 bean 。
自動裝配 (autowiring) - Spring 自動滿足 bean 之間的依賴。

4. (P37.)  掃描包的方式:

1)@ComponentScan 預設會掃描與配置類相同包的類。

2)指定掃描包: @ComponentScan(basePackages="單個類名")、 @ComponentScan(basePackages={“第一個包名”,“第N個包名”}) 、@ComponentScan(basePackagesClasses={A.class,B.class}) 

最後一種方式利於重構程式碼,A 、B 類是介面型別的話,改變實現類的類名,在掃描包時不受影響。

5. (P38.) 

import static org.junit.Assert.*; 

匯入此類,可以呼叫方法 assertNotNull(要檢查的物件);   來檢查物件是否為 null 。

6 . (P38.) Spring 應用上下文中所有的 bean 都會給寫一個 ID , 這個 bean 所給寫的 ID 為類名的第一個字母變小寫。

可以顯示的給 bean 命名,有 2 種方式 :@Compnent ("這個位置寫名字") 、@Named ("這個位置寫名字") 。

---------- 創建於 2018.11.10 

7 . (P41.) 註解 @Autowired  可用在構造方法上,屬性的 Setter 方法上,以及任何方法上。當有且僅有一個 bean 匹配依賴需求,就會裝配起來。當沒有匹配時會丟擲異常。此時可設定 @Autowired 的屬性 required 為 false :@Autowired(required = false),不作檢查,但這樣沒有匹配到 bean ,則 bean 處於未裝配狀態,如果程式碼也未作 null 檢查,可能會出現 NPE(空指標異常)。

@Autowired 可用@Inject 代替。

8 . (P44.)  JavaConfig 是配置程式碼,不包含任何業務邏輯,應當單獨放到一個包中。

9 . (P45.)  @Bean 會告訴 Spring  這個方法將會返回一個物件,該物件要註冊為 Spring 應用上下文中的 bean 。bean 的 ID 與帶有 @Bean 註解的方法名是一樣的。設定不同名字可以重新命名方法名,也可以通過 name 屬性指定不同的名字:@Bean(name = "新名字") 。

10 . (P48.)  可用 Spring  Tool  Suite 建立 XML 配置檔案,並可選擇對應的名稱空間。

11 . (P49.)  XML 中的 <bean> 類似於 JavaConfig 中的 @Bean 。 <bean class = "此處要寫全限定名(全類路徑)"> 。

Spring 發現 <bean> 預設呼叫構造器建立 bean。

12 . (P56.)  裝配通用規則:對於強依賴使用構造器注入,對於可選性的依賴使用屬性注入。

在 XML 中,<property> 對應屬性的 Setter 方法,<constructor-arg> 對應類的構造器。

13 . (P62.)  匯入其它配置:

@Import (XXConfig.class) 可匯入另一個配置類中的配置。
@Import ({AConfig.class,BConfig.class } ) 可以匯入多個。
@ImportResource ("classPath : cd-config.xml") 可以匯入 cd-config.xml 中的配置。

---------- 更新於 2018.11.11