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

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

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

    badqiu

    XPer
    隨筆 - 46, 文章 - 3, 評論 - 195, 引用 - 0
    數據加載中……

    Holder模式

    (本方法屬于作者經驗總結出該模式)

    Holder模式的主要功能是將一些Bean可以轉為靜態方法調用.方便使用.

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

    示例如下:

    BeanValidatorHolder.validate(bean) // HibernateValidator一般系統只有一個
    CacheHolder.get("key") //如Memcached,應用系統也只有一個對象
    ApplicationContextHolder.getBean("userInfoService");

    與singleton相比特點

    • 一個Holder只能持有一個對象
    • Holder一般是持有接口,所以你可以方便的改變實現
    • 配合spring完成Holder初始化

    示例1.CacheHolder?

    用于持有Cache對象

    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實現

    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靜態方法    
    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消息中心的消息發送
    MessageSourceHolder 持用MessageSource?,用于國際化
    MailerHolder 用于郵件發送的Mailer
    ConfigHolder 用于持有配置,需要動態刷新的參數使用,請查看文章保持類的無狀態
    SecurityManagerHolder 用于權限控制的SecurityManager

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

    評論

    # re: Holder模式  回復  更多評論   

    ^_^holder隨好用,但是不利于動態插拔,在OSGi的環境中,static也存在著陷阱。
    2010-06-23 10:31 | 臨遠

    # re: Holder模式  回復  更多評論   

    一直反OSGI,因為OSGI在做容器方面會比較好,但對于WEB應用并不適用,因為OSGI與應用無狀態相違背。 只要做到應用無狀態,要做模塊化劃分是很容易的一件事。

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

    # re: Holder模式  回復  更多評論   

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

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


    網站導航:
     
    主站蜘蛛池模板: 香蕉免费一区二区三区| 亚洲人成影院在线| 色欲aⅴ亚洲情无码AV| 天天操夜夜操免费视频| 亚洲综合丁香婷婷六月香| 91成人免费观看网站| 亚洲 欧洲 自拍 另类 校园| 国色精品卡一卡2卡3卡4卡免费| 亚洲a级在线观看| 麻豆成人精品国产免费| 爱情岛亚洲论坛在线观看| 亚洲精品国产自在久久| 中文毛片无遮挡高清免费| 亚洲成A∨人片在线观看不卡| 亚洲国产精品免费视频| 亚洲av乱码一区二区三区| 妞干网免费观看视频| 免费观看亚洲人成网站| 国产偷v国产偷v亚洲高清| 24小时日本韩国高清免费| 亚洲国产成人久久精品软件| 亚洲欧美成aⅴ人在线观看| 国产美女无遮挡免费视频网站 | 亚洲中文字幕久久精品无码A| 国产gav成人免费播放视频| 国产性生大片免费观看性| 亚洲欧洲高清有无| 免费看国产精品麻豆| 精品国产免费一区二区三区香蕉 | 亚洲午夜无码毛片av久久京东热 | 2015日韩永久免费视频播放| 中文字幕乱码亚洲无线三区 | 国产99精品一区二区三区免费| 亚洲人色婷婷成人网站在线观看| 久久99国产乱子伦精品免费| 亚洲AV第一成肉网| 亚洲国产a∨无码中文777| 久久久久久久久免费看无码| 国产伦精品一区二区三区免费下载| 一区二区三区免费视频网站| 91亚洲国产成人久久精品|