国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

心得:Spring 3種注入的比較分析

2019-11-17 06:06:10
字體:
來源:轉載
供稿:網友

    

Type1 接口注入

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

public class ClassA {
PRivate InterfaceB clzB;
public init() {
Ojbect obj =
Class.forName(Config.BImplementation).newInstance();
clzB = (InterfaceB)obj;
}
……
}


  上面的代碼中,ClassA依靠于InterfaceB的實現,如何獲得InterfaceB實現類的實例?傳統的方法是在代碼中創建InterfaceB實現類的實例,并將起賦予clzB。而這樣一來,ClassA在編譯期即依靠于InterfaceB的實現。為了將調用者與實現者在編譯期分離,于是有了上面的代碼,我們根據預先在配置文件中設定的實現類的類名,動態加載實現類,并通過InterfaceB強制轉型后為ClassA所用。

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

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

  Type2 構造子注入

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

public class DIByConstrUCtor
{
private final DataSource dataSource;
private final String message;
public DIByConstructor(DataSource ds, String msg)
{
this.dataSource = ds;
this.message = msg;
}
……
}


  可以看到,在Type2類型的依靠注入機制中,依靠關系是通過類構造函數建立,容器通過調用類的構造方法,將其所需的依靠關系注入其中。PicoContainer(另一種實現了依靠注入模式的輕量級容器)首先實現了Type2類型的依靠注入模式。

  Type3 設值注入

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

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


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

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

  Type2 構造子注入的優勢

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

  我的理解:就是你要通過一種方式來保證對象的引用完整性,type2選擇了構造器的方式來實現。

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

  我的理解:使用構造方法就不需要每個屬性都寫set和get方法了,這樣省去了很多的代碼。

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

  我的理解:使用構造器來實現,那么你需要一次對所有的屬性都初始話,相對set方法來說,缺少了一些靈活性。

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 舞阳县| 平泉县| 女性| 民权县| 高淳县| 荃湾区| 商都县| 永年县| 沅江市| 绥滨县| 丹棱县| 崇礼县| 邓州市| 加查县| 景宁| 长汀县| 安丘市| 合江县| 定结县| 剑河县| 双流县| 甘泉县| 鸡东县| 皋兰县| 微山县| 仁化县| 垫江县| 房山区| 嘉禾县| 车险| 福清市| 长顺县| 通渭县| 兴安盟| 兴和县| 闽清县| 兴安县| 义马市| 四川省| 达拉特旗| 焦作市|