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

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

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

    (翻譯)JavaEE6規(guī)范 CDI教程第四部分

    (譯)JavaEE6規(guī)范 CDI教程第四部分

    kuuyee  |  2011-06-28  |  JEE   CDI  

    本部分講述@Producer

    使用@Producer來決定如何創(chuàng)建

    可能你希望從AutomatedTellerMachineImpl中把選取傳輸器的方法分離出來。

    你可以創(chuàng)建一個(gè)Producer方法來決定創(chuàng)建和選取傳輸器,看下面的實(shí)例:

    //TransportFactory決定使用/創(chuàng)建哪個(gè)傳輸器 
    package org.cdi.advocacy;

    import javax.enterprise.inject.Produces;
    public class TransportFactory {
    private boolean useJSON = true;
    private boolean behindFireWall = true;
    @Produces ATMTransport createTransport() {
    //Look up config parameters in some config file or LDAP server or database
    System.out.println("ATMTransport created with producer makes decisions");
    if (behindFireWall) {
    if (useJSON) {
    System.out.println("Created JSON transport");
    return new JsonRestAtmTransport();
    } else {
    System.out.println("Created SOAP transport");
    return new SoapAtmTransport();
    }
    } else {
    System.out.println("Created Standard transport");
    return new StandardAtmTransport();
    }
    }
    }

    把創(chuàng)建動作從AutomatedTellerMachineImpl代碼中分離出來是比較高級的做法。

    可能你不總是這么做,但是如果是的話,producer可以幫助你。

    輸出和前面的一樣。

    Output

    ATMTransport created with producer makes decisions Created JSON transport deposit called communicating with bank via JSON REST transport

    在@Producer中使用限定詞來決定如何創(chuàng)建

    這個(gè)例子在最后構(gòu)建

    你同樣可以吧注入項(xiàng)作為參數(shù)傳入到producer中,如下:

    //TransportFactory決定使用/創(chuàng)建哪個(gè)傳輸器 
    package org.cdi.advocacy;

    import javax.enterprise.inject.Produces;
    public class TransportFactory {
    private boolean useJSON = true;
    private boolean behindFireWall = true;
    @Produces ATMTransport createTransport( @Soap ATMTransport soapTransport,
    @Json ATMTransport jsonTransport) {
    //Look up config parameters in some config file
    System.out.println("ATMTransport created with producer makes decisions");
    if (behindFireWall) {
    if (useJSON) {
    System.out.println("return passed JSON transport");
    return jsonTransport;
    } else {
    System.out.println("return passed SOAP transport");
    return soapTransport;
    }
    } else {
    System.out.println("Create Standard transport");
    return new StandardAtmTransport();
    }
    }
    }

    在上面的例子中,createTransport作為CDI的創(chuàng)建動作,通過傳遞soapTransport和jsonTransport減少了工廠方法并增加了選擇方法

     高級話題 你可能奇怪為什么單獨(dú)創(chuàng)建StandardAtmTransport而不是像soapTransportjsonTransport那樣通過參數(shù)注入進(jìn)來。原因是這里的createTransport默認(rèn)使用了@Default@Any,但是被他重寫的StandardAtmTransport同樣默認(rèn)使用@Default@Any,如果我們使用@Default ATMTransport standardTransport作為參數(shù)注入StandardAtmTransport,那么它就會嘗試調(diào)用createTransport,這樣就繼續(xù)注入?yún)?shù)standardTransport,然后又會調(diào)用createTransport,這就產(chǎn)生了無限循環(huán),知道拋出StackTraceOverflow異常。解決辦法是創(chuàng)建一個(gè)@Standard限定注解,然后在注入標(biāo)準(zhǔn)傳輸器StandardAtmTransport

    下面是輸出內(nèi)容。 Output

    ATMTransport created with producer makes decisions return passed JSON transport deposit called communicating with bank via JSON REST transport

    待續(xù)..

    2011-06-28

    posted on 2011-06-28 18:26 kuuyee 閱讀(2188) 評論(4)  編輯  收藏 所屬分類: CDIJEE

    評論

    # re: (翻譯)JavaEE6規(guī)范 CDI教程第四部分 2011-06-29 08:41 愛問知識人

    嗯,博主辛苦了 收藏先  回復(fù)  更多評論   

    # re: (翻譯)JavaEE6規(guī)范 CDI教程第四部分 2011-06-29 11:33 站長工具

    這種方法不錯(cuò)。  回復(fù)  更多評論   

    # re: (翻譯)JavaEE6規(guī)范 CDI教程第四部分 2011-06-29 19:04 casino på nätet

    Great Helpful Codes out there!   回復(fù)  更多評論   

    # re: (翻譯)JavaEE6規(guī)范 CDI教程第四部分 2011-06-29 19:07 casino på nätet

    Xie Xie Ni!   回復(fù)  更多評論   

    導(dǎo)航

    <2011年6月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    統(tǒng)計(jì)

    隨筆分類(139)

    Linux內(nèi)核

    搜索

    •  

    積分與排名

    • 積分 - 320429
    • 排名 - 178

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 2021在线永久免费视频| 国产成年无码久久久免费| 美女视频黄的全免费视频网站| 2048亚洲精品国产| 最好2018中文免费视频| 国产一级大片免费看| 美女视频黄.免费网址| 免费a级毛片视频| 免费无毒a网站在线观看| 亚洲国产成人久久综合野外| 一级毛片正片免费视频手机看| 无码专区一va亚洲v专区在线 | 97超高清在线观看免费视频| 激情97综合亚洲色婷婷五| 无码毛片一区二区三区视频免费播放 | 亚洲日本久久久午夜精品| 无人在线观看免费高清视频| 亚洲熟妇无码AV不卡在线播放| a毛片全部免费播放| 国产成人亚洲综合在线| 国产亚洲3p无码一区二区| 国产乱子精品免费视观看片| 日韩在线观看免费完整版视频| 中文字幕不卡亚洲| 免费人成网站在线观看10分钟| 黄色网址在线免费观看| 亚洲精品无码久久久久久久| 亚洲第一永久AV网站久久精品男人的天堂AV| 91成人免费福利网站在线| 在线观看亚洲AV日韩A∨| 久久精品国产亚洲av四虎| 免费又黄又硬又爽大片| 亚洲激情在线观看| 一级毛片大全免费播放| 亚洲AV无码久久精品蜜桃| 野花高清在线电影观看免费视频| 成人婷婷网色偷偷亚洲男人的天堂 | 亚洲激情校园春色| 国产免费人成视频在线观看 | 成年女人色毛片免费看| 最好2018中文免费视频|