<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-295  評論-26  文章-1  trackbacks-0

    ???? 從網(wǎng)站上看到了有人提起這個框架——Guice,google名下的產(chǎn)物——一個彼Spring快的DI容器,興趣使然,馬上到http://code.google.com/p/google-guice/上去看了看,發(fā)現(xiàn)居然是Bob Lee這位大仙的杰作,還猶豫什么,download下來試試!

    ???? 恩,從哪里試起呢?還是老規(guī)矩,碰到新的東西就來驗證我們經(jīng)典的例子——Hello World!

    ???? 這個東西說是DI,居然沒有.xml或者.properties文件,老天它用的是該死的Annotation,很好,要是大家也想嘗試的話統(tǒng)統(tǒng)5.0或者以上的干活。安裝好環(huán)境,開始動手!可是從哪里開始呢?既然說是DI容器,那好,我們先把我們的程序準備好,然后再看它把各個需要的東西怎么Inject。

    ???? 借鑒一下Spring開發(fā)手冊里的例子吧,稍微改改(無聊的人不要罵這個程序,因為它太簡單,我都想罵!)。既然是要打印,我們先來一個打印的服務(wù)接口:

    ?

    public ? interface ?PrintService
    {
    ????
    public ? void ?print(String?str);
    }

    ?

    很好,再來一個它的實現(xiàn):

    ?

    public ? class ?PrintServiceImpl? implements ?PrintService
    {

    ????
    public ? void ?print(String?str)
    ????{
    ????????System.out.print(str);
    ????}

    }

    ?

    然后呢?一個打印客戶Client:

    ?

    public ? class ?Client
    {
    ????
    private ?String?str = " Hello?world " ;
    ????
    private ?PrintService?service;
    ???? void ?printString()
    ????{
    ????????service.print(str);
    ????}

    }

    ?

    看到了么?這次Inject的不是那個該死的字符串“Hello World”,而是該死的打印服務(wù)!好了,Client和我們的打印服務(wù)是分開的,我不知道Guice會怎么把打印服務(wù)在Client需要的時候Inject進來。不管怎么做,一個test是應(yīng)該有的:

    ?

    import ?junit.framework.TestCase;

    public ? class ?testClient? extends ?TestCase
    {

    ????
    public ? void ?testPrintString()
    ????{
    ????????Client?client
    = new ?Client();
    ????????client.printString();
    ????}

    }

    ?

    好了,試試看,應(yīng)該是紅色的條子。廢話,Client在這里根本不知道該死的打印服務(wù)在哪里。那么尋找打印服務(wù)就是Guice的事情了。

    ???? 讓我們看看Guice是怎么進行Inject的。我們想要Client在使用的時候找到打印服務(wù),那么我們應(yīng)該在Client需要的時候?qū)⑵銲nject進去,這樣的話我們需要寫一個類似于setter的東西來建造一個Inject點,那么我們在Client里添加些東西:

    ?

    import com.google.inject.Inject;
    public ? class ?Client
    {
    ????
    private ?String?str = " Hello?world " ;
    ????
    private ?PrintService?service;
    ??? @Inject
    ???? void ?injectPrintService(PrintService?service)
    ????{
    ????????
    this .service = service;
    ????}

    ????
    void ?printString()
    ????{
    ????????service.print(str);
    ????}

    }

    ?

    我們寫入了一個injectPrintService方法,這個方法可以充當Inject點,然后我們在這個方法上面來一個Annotation——@Inject”,這就是告訴Guice應(yīng)該在哪里Inject我們需要的打印服務(wù)。

    ???? 好了,我們下面要做的就是把PrintService和我們的實現(xiàn)動態(tài)的綁定起來(接口編程,好主意)。在Guice里,我們需要實現(xiàn)一個叫做Module的接口,Guice將一個binder傳遞給你的Module,然后你的Module將接口和它的實現(xiàn)綁定起來。讓我們來試一下:

    ?

    import ?com.google.inject.Binder;
    import ?com.google.inject.Module;

    public ? class ?MyModule? implements ?Module
    {

    ????
    public ? void ?configure(Binder?binder)
    ????{
    ????????binder.bind(PrintService.
    class ).to(PrintServiceImpl. class );
    ????}

    }

    ?

    在我們需要打印服務(wù)的時候,Guice會自動創(chuàng)建一個PrintServiceImpl的實例給我們。OK,接下來就是如何注入的問題了,我們需要在test中實現(xiàn):

    ?

    import ?junit.framework.TestCase;
    import ?com.google.inject. * ;

    public ? class ?testClient? extends ?TestCase
    {

    ????
    public ? void ?testPrintString()
    ????{
    ????????MyModule?mo
    = new ?MyModule();
    ????????Injector?in
    = Guice.createInjector(mo);
    ????????Client?client
    = new ?Client();
    ????????in.injectMembers(client);
    ????????client.printString();
    ????}

    }

    ?

    完了!一個全新的Hello world將要被打印出來了。

    ???? Guice的工作流程是這樣的:

    首先將自己創(chuàng)建的Module傳給Guice.createInjector(),Guice會為你的Module創(chuàng)建一個binder,你的Module利用這個binder來實現(xiàn)各種綁定,然后在Guice會創(chuàng)建一個Injector出來,我們就可以利用這個Injector來Inject我們的服務(wù)了。

    ???Guice將DI這個概念完完全全的詮釋了出來,使我們在編寫的應(yīng)用的時候不必去考慮具體的實現(xiàn)在哪里,Guice會為你動態(tài)的綁定并且Inject的。很好使的框架,很有意思,以后繼續(xù)關(guān)注!!



    大盤預(yù)測 國富論
    posted on 2007-11-03 16:59 華夢行 閱讀(114) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 久久久久噜噜噜亚洲熟女综合 | 在线成人精品国产区免费| 亚洲熟女少妇一区二区| 2021精品国产品免费观看| 亚洲国产精品日韩av不卡在线| 亚洲男人天堂2020| 在线美女免费观看网站h| 久久水蜜桃亚洲AV无码精品| 亚洲中文字幕无码爆乳AV | 久久国产亚洲精品麻豆| 青草草色A免费观看在线| 一级毛片免费在线| 456亚洲人成影院在线观| 91麻豆精品国产自产在线观看亚洲| 永久免费视频网站在线观看| 黄页网址在线免费观看| 亚洲视频一区网站| 国产国拍亚洲精品福利 | 亚洲国产成人久久一区久久| 最近2022中文字幕免费视频| 成年大片免费视频播放一级| 亚洲av无码一区二区三区天堂古代 | 91亚洲精品自在在线观看| 免费在线观看a级毛片| 久久久久av无码免费网| 国产精品1024在线永久免费 | 国产婷婷成人久久Av免费高清| 亚洲偷自拍另类图片二区| 色婷婷六月亚洲婷婷丁香| 亚洲成a人片在线观看国产| 成人毛片视频免费网站观看| 国产99视频精品免费专区| 男女污污污超污视频免费在线看| 亚洲欧洲综合在线| 久久亚洲欧洲国产综合| 色吊丝永久在线观看最新免费| 最近中文字幕大全免费视频| 182tv免费视频在线观看| 免费国产草莓视频在线观看黄| 亚洲色图激情文学| 亚洲mv国产精品mv日本mv|