zoukankan      html  css  js  c++  java
  • EHCache 实现通用类 CacheManager

    package com.zhubaje.api.workflow.ehcache;
    
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    import net.sf.ehcache.Cache;
    import net.sf.ehcache.CacheManager;
    import net.sf.ehcache.Element;
    
    import org.springframework.beans.factory.DisposableBean;
    
    /**
     * 基本缓存支持类  <b>description:</b><br/>
     * <b>createtime:</b>2013-5-10 上午11:41:47<br/>
     * <b>remark:</b><br/>
     * 
     * @version 1.0.0<br/>
     * 
     */
    
    @SuppressWarnings("unchecked")
    public class EhCacheBean<K extends Serializable, V> implements ICache<K, V>,
    		DisposableBean {
    
    	protected boolean useCache = true;
    	protected CacheManager cacheManager;
    
    	public CacheManager getCacheManager() {
    		return cacheManager;
    	}
    
    	public void setCacheManager(CacheManager cacheManager) {
    		this.cacheManager = cacheManager;
    	}
    
    	protected Cache cache;
    
    	@Override
    	public void put(K k, V v) {
    		if(useCache){
    			cache.put(new Element(k, v));
    		}
    		
    	}
    
    	@Override
    	public V get(K key) {
    		if(!useCache){
    			return null;
    		}
    		if (!cache.isKeyInCache(key)) {
    			return null;
    		}
    		return (V) cache.get(key).getObjectValue();
    	}
    
    	@Override
    	public List<K> keys() {
    		return cache.getKeys();
    	}
    
    	@Override
    	public List<V> values() {
    		List<K> keys = cache.getKeys();
    		List<V> result = new ArrayList<V>(keys.size());
    		for (Iterator<K> itKey = keys.iterator(); itKey.hasNext();) {
    			result.add((V)cache.get(itKey.next()).getObjectValue());
    		}
    		return result;
    	}
    
    	@Override
    	public V remove(K key) {
    		if (cache.isKeyInCache(key)) {
    			Object obj = cache.get(key).getObjectValue();
    			cache.remove(key);
    			return (V) obj;
    		}
    		return null;
    	}
    
    	public Cache getCache() {
    		return cache;
    	}
    
    	public void setCache(Cache cache) {
    		this.cache = cache;
    	}
    
    	@Override
    	public void destroy() throws Exception {
    		synchronized (cacheManager) {
    			if (null != cacheManager) {
    				cacheManager.shutdown();
    			}
    		}
    	}
    
    }
    


  • 相关阅读:
    LInq 与lambda表达式
    Java内存模型-jsr133规范介绍(转)
    Java多线程之Lock的使用(转)
    有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果(转)
    CountDownLatch
    CyclicBarrier
    java设计模式演示样例
    2012毕业找工作记录点滴
    Objective-C语法之代码块(block)的使用
    权限表设计之代码解析
  • 原文地址:https://www.cnblogs.com/riskyer/p/3285571.html
Copyright © 2011-2022 走看看