熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Spring筆記和小結(二)

2013-11-23 20:45:12  來源: Java開源技術 
    這一節主要簡單介紹了依賴注入的思想強調了依賴注入是Spring框架的一種核心模式

    下面簡單的說明了這種依賴注入的情況客戶端使用到了另一個我們稱為service的類客戶端有自己的屬性用來接受這個service這個service被包裝成一個接口因此客戶端是看不到service的具體實現的但是這個並不完全是松耦合的我們仍然要自己創建service在依賴注入的思想裡一種第三方的控制器或裝配器用來創建一個客戶端和一個service然後set一個service的引用來滿足依賴注入的要求

    其實我們並不一定需要一個輕量級容器來使用依賴注入的模式我們只需要三步就可以使用依賴注入模式來完成模塊的解耦

     將這個service類包裝成一個接口

     給客戶端添加一個屬性做為這個service接口的引用

     使用一個第三方框架或自己編寫的代碼來開發這個service並設置該屬性

    下面我們來看如何改寫第一節裡的范例代碼

    Example ArrayListRentABikejava (renamed from RentABikejava)

    import javautil*;
    public class ArrayListRentABike implements RentABike
    { 
    private String storeName; 
    final List bikes = new ArrayList( ); 
    public ArrayListRentABike( ) { initBikes( ); } 
    public ArrayListRentABike(String storeName)
    {   
    thisstoreName = storeName;   
    initBikes( );
    }
    public void initBikes( )
    { 
    bikesadd(new Bike(Shimano Roadmaster Fair)); 
    bikesadd(new Bike(Cannondale F XTR Excellent)); 
    bikesadd(new Bike(Trek Fair));
    }
    public String toString( ) { return RentABike: + storeName; }
    public List getBikes( ) { return bikes; }
    public Bike getBike(String serialNo) {  Iterator iter = bikesiterator( ); 
    while(iterhasNext( ))
    {
    Bike bike = (Bike)iternext( );   
    if(serialNoequals(bikegetSerialNo( ))) return bike; 
    }   
    return null; 
    }
    }

    Example RentABikejava
    import javautil*;interface RentABike {  List getBikes( );  Bike getBike(String serialNo);}

    大家看到了RentABike由原來的具體類改成了一個接口而具體實現類是由ArrayListRentABike來完成的實現類裡的操作和方法和第一節裡的原RentABike是一模一樣的

    再來看看客戶端的代碼

    Example CommandLineViewjava
    import javautil*;
    public class CommandLineView
    { 
    private RentABike rentaBike;//接口的引用 
    public CommandLineView( ) { }  //set接口 
    public void setRentaBike(RentABike rentaBike) { thisrentaBike = rentaBike; } 
    public RentABike getRentaBike( ) { return thisrentaBike;} 
    public void printAllBikes( )
    { 
    Systemoutprintln(rentaBiketoString( ));   
    Iterator iter = rentaBikegetBikes( )iterator( );   
    while(iterhasNext( ))
    {       
    Bike bike = (Bike)iternext( );       
    Systemoutprintln(biketoString( ));   
    } 
    }
    }

    大家應該注意到了吧這裡客戶端有一個屬性放置RentABike接口的引用

    最後我們有一個控制器或裝配器來創建所有的對象並設置它們的屬性

    Example RentABikeAssemblerjava

    public class RentABikeAssembler
    { 
    public static final void main(String[] args)
    {   
    //創建一個客戶端對象   
    CommandLineView clv = new CommandLineView( );   
    //裝配器給出了接口的具體實現所謂面向接口的編程   
    RentABike rentaBike = new ArrayListRentABike(Bruces Bikes);   
    //設置客戶端對象的屬性將接口通過構造方法的模式注入   
    clvsetRentaBike(rentaBike);   
    //調用客戶端對象的內部方法   
    clvprintAllBikes( ); 
    }
    }

    實際上以上操作就完成了三個步驟的依賴注入模式
    我們運行程序可以得到和第一節同樣的結果
    C:\RentABikeApp\out>java RentABikeAssembler

    RentABike: Bruces Bikes
    Bike : manufacturer Shimano
    : model Roadmaster
    : frame
    : serialNo
    : weight
    : status Fair

    Bike : manufacturer Cannondale
    : model F XTR
    : frame
    : serialNo
    : weight
    : status Excellent

    Bike : manufacturer Trek
    : model
    : frame
    : serialNo
    : weight
    : status Fair

    大家現在看到了一個不用特定容器而實現的簡單的依賴注入通過一個裝配器來完成注入操作其實最終這個裝配器會用Spring框架來取代Spring會為我們創建對象和設置屬性

    下面是JEE應用程序使用service locator來管理其依賴service locator是JEE核心設計模式之一它經常被用在命名和服務定位上

    service location這種設計模式把依賴從應用程序中完全脫離了出來我們後面會陸續講到


From:http://tw.wingwit.com/Article/program/Java/ky/201311/29021.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.