成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring中接口注入的三種方式

開發 后端
本文主要介紹了Spring中接口注入的三種方式,希望對你有幫助,一起來看。

Spring接口注入的三種方式,上面的代碼中,ClassA依賴于InterfaceB的實現,如何獲得InterfaceB實現類的實例?傳統的方法是在代碼中創建InterfaceB實現類的實例,并將起賦予clzB.

Type1 接口注入

我們常常借助接口來將調用者與實現者分離。如:

 

  1. public class ClassA   
  2. {private InterfaceB clzB;  
  3. public init()   
  4. {Ojbect obj =Class.forName(Config.BImplementation).newInstance();  
  5. clzB = (InterfaceB)obj;}  
  6. ……  

 

上面的代碼中,ClassA依賴于InterfaceB的實現,如何獲得InterfaceB實現類的實例?傳統的方法是在代碼中創建InterfaceB實現類的實例,并將起賦予clzB.

而這樣一來,ClassA在編譯期即依賴于InterfaceB的實現。為了將調用者與實現者在編譯期分離,于是有了上面的代碼,我們根據預先在配置文件中設定的實現類的類名,動態加載實現類,并通過InterfaceB強制轉型后為ClassA所用。

這就是接口注入的一個最原始的雛形。

而對于一個Type1型IOC容器而言,加載接口實現并創建其實例的工作由容器完成,如J2EE開發中常用的Context.lookup(ServletContext.getXXX),都是Type1型IOC的表現形式。

Apache Avalon是一個典型的Type1型IOC容器。

Type2構造子注入

構造子注入,即通過構造函數完成依賴關系的設定,如:

 

  1. public class DIByConstructor   
  2. {private final DataSource dataSource;  
  3. private final String message;  
  4. public DIByConstructor(DataSource ds, String msg)   
  5. {  
  6. this.dataSource = ds;  
  7. this.message = msg;  
  8. }  
  9. ……  

 

可以看到,在Type2類型的依賴注入機制中,依賴關系是通過類構造函數建立,容器通過調用類的構造方法,將其所需的依賴關系注入其中。

PicoContainer(另一種實現了依賴注入模式的輕量級容器)首先實現了Type2類型的依賴注入模式。

Type3設值注入

在各種類型的依賴注入模式中,設值注入模式在實際開發中得到了最廣泛的應用(其中很大一部分得力于Spring框架的影響)。

在筆者看來,基于設置模式的依賴注入機制更加直觀、也更加自然。Quick Start中的示例,就是典型的設置注入,即通過類的setter方法完成依賴關系的設置。

幾種依賴注入模式的對比總結

接口注入模式因為具備侵入性,它要求組件必須與特定的接口相關聯,因此并不被看好,實際使用有限。

Type2 構造子注入的優勢:

1、“在構造期即創建一個完整、合法的對象”,對于這條Java設計原則,Type2無疑是***的響應者。

2、避免了繁瑣的setter方法的編寫,所有依賴關系均在構造函數中設定,依賴關系集中呈現,更加易讀。

3、由于沒有setter方法,依賴關系在構造時由容器一次性設定,因此組件在被創建之后即處相對“不變”的穩定狀態,無需擔心上層代碼在調用過程中執行setter方法對組件依賴關系產生破壞,特別是對于Singleton模式的組件而言,這可能對整個系統產生重大的影響。

4、同樣,由于關聯關系僅在構造函數中表達,只有組件創建者需要關心組件內部的依賴關系。對調用者而言,組件中的依賴關系處于黑盒之中。對上層屏蔽不必要的信息,也為系統的層次清晰性提供了保證。

5、通過構造子注入,意味著我們可以在構造函數中決定依賴關系的注入順序,對于一個大量依賴外部服務的組件而言,依賴關系的獲得順序可能非常重要,比如某個依賴關系注入的先決條件是組件的DataSource及相關資源已經被設定。

Type3設值注入的優勢

1、對于習慣了傳統JavaBean開發的程序員而言,通過setter方法設定依賴關系顯得更加直觀,更加自然。

2、如果依賴關系(或繼承關系)較為復雜,那么Type2模式的構造函數也會相當龐大(我們需要在構造函數中設定所有依賴關系),此時Type3模式往往更為簡潔。

3、對于某些第三方類庫而言,可能要求我們的組件必須提供一個默認的構造函數(如Struts中的Action),此時Type2類型的依賴注入機制就體現出其局限性,難以完成我們期望的功能。

可見,Type2和Type3模式各有千秋,而Spring、PicoContainer都對Type2和Type3類型的依賴注入機制提供了良好支持。這也就為我們提供了更多的選擇余地。理論上,以Type2類型為主,輔之以Type3類型機制作為補充,可以達到***的依賴注入效果,不過對于基于Spring Framework開發的應用而言,Type3使用更加廣泛。

【編輯推薦】

  1. JAVA技巧心得 學Java切忌浮躁
  2. 菜鳥入門 java語言學習六大要點
  3. JAVA虛擬機內存分配與回收機制
  4. 詳解reflectJava的反射機制
  5. Java中ArrayList和LinkedList區別
責任編輯:于鐵 來源: 幫考網
相關推薦

2011-07-22 17:22:20

Spring

2012-07-17 09:16:16

SpringSSH

2021-10-26 00:01:59

Spring方式代碼

2009-07-20 15:08:41

Spring實例化Be

2022-01-17 08:19:51

Javascript 接口前端

2022-01-20 08:38:02

Java接口Lambda

2024-07-01 12:42:58

2025-01-08 09:55:37

Spring接口數據庫

2024-10-14 09:20:09

異步流式接口

2021-11-23 10:30:35

Android技術代碼

2020-11-01 17:10:46

異步事件開發前端

2021-11-05 21:33:28

Redis數據高并發

2019-11-20 18:52:24

物聯網智能照明智能恒溫器

2014-12-31 17:42:47

LBSAndroid地圖

2021-06-24 08:52:19

單點登錄代碼前端

2010-03-12 17:52:35

Python輸入方式

2023-12-19 16:43:01

2021-08-10 10:14:14

存儲接口存儲設備存儲

2021-12-21 09:50:02

Java請求合并代碼

2024-10-12 08:18:21

Spring接口組件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产高清精品一区二区三区 | 精品一级毛片 | 国产一级片91 | 欧美激情综合色综合啪啪五月 | 狠狠视频 | 99精品电影| 欧美色综合一区二区三区 | 在线观看中文字幕dvd播放 | 日韩一区二区三区在线观看 | 一级午夜aaa免费看三区 | jlzzjlzz欧美大全 | 天天操网 | 亚洲成人三级 | 国产一区二区三区四区 | 在线观看av网站永久 | a级大片免费观看 | 欧美日本在线观看 | 国产一级片在线观看视频 | 久久国产高清 | 亚洲精品片 | av黄色免费 | 香蕉91 | 亚洲一区中文字幕在线观看 | 玖玖久久 | 四虎最新视频 | 国产欧美精品区一区二区三区 | 91精品国产乱码久久久久久久久 | av在线成人 | 日韩精品极品视频在线观看免费 | 97国产一区二区 | av一区二区三区四区 | 区一区二在线观看 | 国产在线精品一区二区三区 | 天天久久| 精品国产欧美 | 男女网站在线观看 | a级毛片毛片免费观看久潮喷 | 麻豆一区 | 国产99久久精品一区二区永久免费 | 亚洲精品乱码久久久久久黑人 | 国产高清一区二区三区 |