java取出缓存中得结果集,月光软件站 - 编程文档 - Java - 利用Spring AOP 缓存方法结果集...

importjava.io.Serializable;

importnet.sf.ehcache.Cache;

importnet.sf.ehcache.Element;

importorg.aopalliance.intercept.MethodInterceptor;

importorg.aopalliance.intercept.MethodInvocation;

importorg.springframework.beans.factory.InitializingBean;

/**

*拦截器,用于缓存方法返回结果.

*

*@version$Id:MethodCacheInterceptor.javav1.02004-11-2814:57:00ZnjqExp$

*@authorZnjq

*/

publicclassMethodCacheInterceptorimplementsMethodInterceptor,

InitializingBean {

privateCache cache;

/**

*setscachenametobeused

*/

publicvoidsetCache(Cache cache) {

this.cache = cache;

}

/*

* (non-Javadoc)

*

* @see org.aopalliance.intercept.MethodInterceptor#invoke(org.aopalliance.intercept.MethodInvocation)

*/

publicObject invoke(MethodInvocation invocation)throwsThrowable {

String targetName = invocation.getThis().getClass().getName();

String methodName = invocation.getMethod().getName();

Object[] arguments = invocation.getArguments();

Object result;

String cacheKey = getCacheKey(targetName, methodName, arguments);

Element element = cache.get(cacheKey);

if(element ==null) {

//call target/sub-interceptor

result = invocation.proceed();

//cache method result

element =newElement(cacheKey, (Serializable) result);

cache.put(element);

}

returnelement.getValue();

}

/**

*createscachekey:targetName.methodName.argument0.argument1...

*/

privateString getCacheKey(String targetName, String methodName,

Object[] arguments) {

StringBuffer sb =newStringBuffer();

sb.append(targetName).append(".").append(methodName);

if((arguments !=null) && (arguments.length != 0)) {

for(inti = 0; i < arguments.length; i++) {

sb.append(".").append(arguments[i]);

}

}

returnsb.toString();

}

/*

* (non-Javadoc)

*

* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()

*/

publicvoidafterPropertiesSet()throwsException {

//TODOAuto-generated method stub

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值