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 閱讀(2875) 評(píng)論(3) 編輯 收藏