没有合适的资源?快使用搜索试试~ 我知道了~
首页Spring来实现一个Cache简单的解决方案
资源详情
资源评论
资源推荐

Spring来实现一个Cache简单的解决方案(转) - julyboxer 算法 股票 java,Ajax,Spring,Hibernate,Ejb3 - JavaEye技术网站
● 帮助● 搜索● 退出● 设置● 我的圈子● 我的博客● 收件箱 (0)● 欢迎 wxcmyx !
julyboxer 算法 股票 java,Ajax,Spring,
Hibernate,Ejb3
永久域名 http://julyboxer.javaeye.com
计划...
11 小时前
Spring来实现一个Cache简单的解决方案(转)
需要使用Spring来实现一个Cache简单的解决方案,具体需求如下:使用任意一个现有开源Cache Framework,要求可以Cache系统中
Service或则DAO层的get/find等方法返回结果,如果数据更新(使用 Create/update/delete方法),则刷新cache中相应的内容。
根据需求,计划使用Spring AOP + ehCache来实现这个功能,采用ehCache原因之一是Spring提供了ehCache的支持,至于为何仅仅支
持ehCache而不支持 osCache和JBossCache无从得知(Hibernate???),但毕竟Spring提供了支持,可以减少一部分工作量:)。二是后
来实现了 OSCache和JBoss Cache的方式后,经过简单测试发现几个Cache在效率上没有太大的区别(不考虑集群),决定采用
ehCahce。
AOP嘛,少不了拦截器,先创建一个实现了MethodInterceptor接口的拦截器,用来拦截Service/DAO的方法调用,拦截到方法后,搜索该方
法的结果在cache中是否存在,如果存在,返回cache中的缓存结果,如果不存在,返回查询数据库的结果,并将结果缓存到cache 中。
MethodCacheInterceptor.java
代码:
package com.co.cache.ehcache;
import java.io.Serializable;
import net.sf.ehcache.Cache;
import net.sf.ehcache.Element;
julyboxer
● 浏览: 8675 次
● 性别:
● 来自: 厦门
●
● 详细资料 发送短消息
搜索本博客
博客分类
● 全部博客 (35)
● java (15)
http://julyboxer.javaeye.com/blog/168911(第 1/18 页)[2008/3/7 11:50:10]
搜索

Spring来实现一个Cache简单的解决方案(转) - julyboxer 算法 股票 java,Ajax,Spring,Hibernate,Ejb3 - JavaEye技术网站
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.Assert;
public class MethodCacheInterceptor implements MethodInterceptor, InitializingBean
{
private static final Log logger = LogFactory.getLog(MethodCacheInterceptor.class);
private Cache cache;
public void setCache(Cache cache) {
this.cache = cache;
}
public MethodCacheInterceptor() {
super();
}
/**
* 拦截Service/DAO的方法,并查找该结果是否存在,如果存在就返回cache中的值,
* 否则,返回数据库查询结果,并将查询结果放入cache
*/
● 算法 (1)
● AJAX (2)
● 大杂烩 (1)
● 项目 (1)
● 股票 (3)
● UML (0)
● J2EE (1)
● 心情日记 (3)
● 电信 (1)
● oracle (2)
我的相册
复件 web
共 1 张
其他分类
● 我的收藏 (10)
http://julyboxer.javaeye.com/blog/168911(第 2/18 页)[2008/3/7 11:50:10]

Spring来实现一个Cache简单的解决方案(转) - julyboxer 算法 股票 java,Ajax,Spring,Hibernate,Ejb3 - JavaEye技术网站
public Object invoke(MethodInvocation invocation) throws Throwable {
String targetName = invocation.getThis().getClass().getName();
String methodName = invocation.getMethod().getName();
Object[] arguments = invocation.getArguments();
Object result;
logger.debug("Find object from cache is " + cache.getName());
String cacheKey = getCacheKey(targetName, methodName, arguments);
Element element = cache.get(cacheKey);
if (element == null) {
logger.debug("Hold up method , Get method result and create cache........!");
result = invocation.proceed();
element = new Element(cacheKey, (Serializable) result);
cache.put(element);
}
return element.getValue();
}
/**
* 获得cache key的方法,cache key是Cache中一个Element的唯一标识
* cache key包括 包名+类名+方法名,如com.co.cache.service.UserServiceImpl.getAllUser
*/
private String getCacheKey(String targetName, String methodName, Object[] arguments) {
● 我的论坛帖子 (56)
● 我的精华良好贴 (0)
最近加入圈子
● JSF
● 厦门之恋
● 福建JavaEyer
存档
● 2008-03 (2)
● 2008-01 (6)
● 2007-12 (1)
● 更多存档...
最新评论
● 回复: 类似QQ的同名用户登录问
题的解决 ...
使用Spring进行JMS消息传递
——不错,但是没有魔法 http://
spri ...
http://julyboxer.javaeye.com/blog/168911(第 3/18 页)[2008/3/7 11:50:10]

Spring来实现一个Cache简单的解决方案(转) - julyboxer 算法 股票 java,Ajax,Spring,Hibernate,Ejb3 - JavaEye技术网站
StringBuffer sb = new StringBuffer();
sb.append(targetName).append(".").append(methodName);
if ((arguments != null) && (arguments.length != 0)) {
for (int i = 0; i < arguments.length; i++) {
sb.append(".").append(arguments[i]);
}
}
return sb.toString();
}
/**
* implement InitializingBean,检查cache是否为空
*/
public void afterPropertiesSet() throws Exception {
Assert.notNull(cache, "Need a cache. Please use setCache(Cache) create it.");
}
}
上面的代码中可以看到,在方法public Object invoke(MethodInvocation invocation) 中,完成了搜索Cache/新建cache的功能。
代码:
Element element = cache.get(cacheKey);
这句代码的作用是获取cache中的element,如果cacheKey所对应的element不存在,将会返回一个null值
-- julyboxer
● 回复: Spring来实现一个Cache
简单的解 ...
spring 权限问题http://spring.
jactiongroup.ne ...
--
julyboxer
● 回复: Spring来实现一个Cache
简单的解 ...
HibernateInterceptor和事务无
关,它的用途在javadocs中 ...
--
julyboxer
● 回复: Spring来实现一个Cache
简单的解 ...
http://spring.jactiongroup.net/
--
julyboxer
● 回复: 想找一个会织衣服的MM
世界经理人社区http://bbs.icxo.
com
http://julyboxer.javaeye.com/blog/168911(第 4/18 页)[2008/3/7 11:50:10]
剩余17页未读,继续阅读

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论1