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

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

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

    badqiu

    XPer
    隨筆 - 46, 文章 - 3, 評(píng)論 - 195, 引用 - 0
    數(shù)據(jù)加載中……

    Holder模式

    (本方法屬于作者經(jīng)驗(yàn)總結(jié)出該模式)

    Holder模式的主要功能是將一些Bean可以轉(zhuǎn)為靜態(tài)方法調(diào)用.方便使用.

    適用于一些系統(tǒng)只存在單例(singleton)并且 十分常用 的基礎(chǔ)服務(wù)對(duì)象.這些基礎(chǔ)服務(wù)如果每次使用spring注入,只會(huì)增加無(wú)謂的代碼及一些不確定性.

    示例如下:

    BeanValidatorHolder.validate(bean) // HibernateValidator一般系統(tǒng)只有一個(gè)
    CacheHolder.get("key") //如Memcached,應(yīng)用系統(tǒng)也只有一個(gè)對(duì)象
    ApplicationContextHolder.getBean("userInfoService");

    與singleton相比特點(diǎn)

    • 一個(gè)Holder只能持有一個(gè)對(duì)象
    • Holder一般是持有接口,所以你可以方便的改變實(shí)現(xiàn)
    • 配合spring完成Holder初始化

    示例1.CacheHolder?

    用于持有Cache對(duì)象

    1.1在spring中初始化

    <bean class="cn.org.rapid_framework.util.holder.CacheHolder">
        <property name="cache" ref="memcacheCacheImpl"/>
    </bean>

    1.2使用 CacheHolder?使用

    CacheHolder.add("key","cache_value","1h");
    //do something

    1.3實(shí)現(xiàn)

    public class CacheHolder implements InitializingBean{
        private static Cache cache;
       
    public void afterPropertiesSet() throws Exception {         if(cache == null) throw new IllegalStateException("not found 'cache' for CacheHolder ");     }             public void setCache(Cache c) {         if(cache != null) throw new IllegalStateException("CacheHolder already holded 'cache'");         cache = c;     }
       
    public static Cache getCache(){         return cache;     }
    //省略了其它N多cache靜態(tài)方法    
    public static void add(String key, Object value, String expiration) {         cache.add(key, value, parseDuration(expiration));     }
       
    public static void cleanHolder() {         cache = null;     }        }

    其它可以存在的Holder

    holder 功能
    BeanValidatorHolder 用于持有Hibernate Validator
    SpringValidatorHolder 用于持有Spring Validator
    ApplicationContextHolder 用于持有Spring ApplicationContext?
    CacheHolder 用于持有Cache
    MessagePublisherHodler 用于持有類似JMS消息中心的消息發(fā)送
    MessageSourceHolder 持用MessageSource?,用于國(guó)際化
    MailerHolder 用于郵件發(fā)送的Mailer
    ConfigHolder 用于持有配置,需要?jiǎng)討B(tài)刷新的參數(shù)使用,請(qǐng)查看文章保持類的無(wú)狀態(tài)
    SecurityManagerHolder 用于權(quán)限控制的SecurityManager

    posted on 2010-06-22 22:01 badqiu 閱讀(2869) 評(píng)論(3)  編輯  收藏

    評(píng)論

    # re: Holder模式  回復(fù)  更多評(píng)論   

    ^_^holder隨好用,但是不利于動(dòng)態(tài)插拔,在OSGi的環(huán)境中,static也存在著陷阱。
    2010-06-23 10:31 | 臨遠(yuǎn)

    # re: Holder模式  回復(fù)  更多評(píng)論   

    一直反OSGI,因?yàn)镺SGI在做容器方面會(huì)比較好,但對(duì)于WEB應(yīng)用并不適用,因?yàn)镺SGI與應(yīng)用無(wú)狀態(tài)相違背。 只要做到應(yīng)用無(wú)狀態(tài),要做模塊化劃分是很容易的一件事。

    不需要OSGI搞得這么復(fù)雜.
    2010-06-23 10:41 | badqiu

    # re: Holder模式  回復(fù)  更多評(píng)論   

    OSGi引入了非常大的難度和風(fēng)險(xiǎn),帶來(lái)的好處也很明顯。仁者見仁,智者見智了。如果用ThreadLocal而不是static作為Holder的媒介,就可以避免OSGi這類多classloader環(huán)境帶來(lái)的隱形問(wèn)題。
    2010-06-23 11:09 | 臨遠(yuǎn)

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲精品无码久久毛片波多野吉衣| 久久亚洲国产成人亚| 久久精品无码免费不卡| 亚洲AV综合色一区二区三区| 精品免费久久久久久久| 亚洲人成网站999久久久综合| 久久精品国产精品亚洲人人 | 韩国日本好看电影免费看| 有色视频在线观看免费高清在线直播| 亚洲产国偷V产偷V自拍色戒| 性xxxx视频播放免费| 日本道免费精品一区二区| 色欲aⅴ亚洲情无码AV蜜桃| 亚洲国产成人高清在线观看 | 成人无码视频97免费| 亚洲人成网男女大片在线播放| 亚洲国产激情一区二区三区| 国产精彩免费视频| 一区二区三区免费视频播放器| 亚洲码一区二区三区| 浮力影院亚洲国产第一页| 最近的中文字幕大全免费版| 国产午夜成人免费看片无遮挡| 午夜亚洲WWW湿好爽| 中文字幕亚洲综合久久2| 亚洲VA综合VA国产产VA中| www.999精品视频观看免费| 东方aⅴ免费观看久久av | 成在线人视频免费视频| 亚洲色在线无码国产精品不卡| 亚洲AV中文无码字幕色三| 四虎1515hm免费国产| A在线观看免费网站大全| 嫩草在线视频www免费观看| 污网站在线观看免费| 亚洲色欲色欲www在线播放 | 亚洲精品91在线| 亚洲国产成人一区二区三区| 亚洲成?v人片天堂网无码| 卡一卡二卡三在线入口免费| 成人免费黄色网址|