java的依賴注入
① java面試題:@Autowired 和 @Resource 的區別是什麼
@Autowired 和 @Resource 都是用於 Java 中的依賴注入,以簡化對象之間的關聯。這兩者的使用場景和默認行為有明顯區別。
@Autowired 註解屬於 Spring 的內置註解,其默認行為是通過類型進行匹配注入(byType),即 Spring 會根據介面類型查找並注入實現類。但若介面存在多個實現類,則無法確定應注入哪一個,這時默認會轉換為通過名稱進行匹配注入(byName),即使用類名作為唯一標識進行匹配。對於開發時可能出現的命名沖突問題,建議明確使用 @Qualifier 註解指定具體名稱。
@Resource 註解則是 JDK 提供的,其默認行為同樣是通過名稱進行匹配注入(byName)。若通過名稱無法匹配到對應的 Bean,則會轉換為通過類型進行匹配注入(byType)。@Resource 註解有兩個關鍵屬性:name 和 type。僅指定 name 屬性時,注入方式為 byName;僅指定 type 屬性時,注入方式為 byType;若同時指定 name 和 type,則先通過 type 進行匹配,再通過 name 進行確認。
簡而言之,@Autowired 的默認匹配方式由類型轉為名稱,而 @Resource 的默認匹配方式始終為名稱。在實際開發中,根據具體情況選擇合適的註解使用,以確保對象的正確注入。
② javaDI是什麼意思
JavaDI全稱為Java Dependency Injection,也被稱為Java依賴注入,它是一種設計模式。以下是關於JavaDI的詳細解釋:
目的:
- 用於減少Java應用程序中各部分之間的依賴關系,提高代碼的可重用性和可測試性。
工作原理:
- 通過將對象所需的依賴項自動注入到對象中,構建應用程序的整個對象圖。
- 使用容器管理對象的生命周期和依賴關系,避免手動創建和組裝對象。
優點:
- 解耦:將業務代碼與服務定位解耦,使得代碼更加模塊化。
- 可重用性和可測試性:在復雜的大型應用中確保代碼的可重用性和可測試性。
- 降低復雜性:降低系統本身的復雜性,減少項目變更成本和技術債務。
- 提高開發效率:使得Java應用程序開發更加快捷,減少錯誤,提高代碼質量。
核心特性:
- 配置元數據:依賴關系成為配置元數據,與組件的實現代碼分離,有助於創建鬆散耦合的應用程序。
- 容器管理:構成容器管理對象的創建、組裝和依賴關系,開發人員無需手動處理這些任務。
總之,JavaDI是一種強大的設計模式,通過自動注入依賴項,幫助開發人員構建更加模塊化、可維護、可測試和可重用的Java應用程序。