关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 更新日志 - 技术支持 - 招聘英才

JEECG最新版本下载 JEECG智能开发平台 - 显著提高开发效率 常见问题 - 入门视频 - 参与开源团队

商务QQ: 69893005、418799587 商务热线(5*8小时): 010-64808099 官方邮箱: jeecgos@163.com

查看: 13799|回复: 0

spring的环绕通知能否获得被环绕的方法的参数名

[复制链接]
发表于 2013-8-17 07:58:02 | 显示全部楼层 |阅读模式

由于需要做一个统一的缓存,我用的是spring的环绕通知,切入匹配的方法前从缓存服务器获取数据,现在的问题是特殊情况特殊处理,比如某种数据的缓存只在缓存服务器存在一分钟,其他默认的30分钟,这就需要我获得该方法取得数据的缓存时间,再存入缓存,但是环绕通知貌似只能获得参数值,没有拿到参数名的方法

代码如下,知道的同鞋指导讨论下啊


        Object[] args = call.getArgs();
        StringBuffer key = new StringBuffer();
        key.append(call.getTarget().getClass().getName())
        .append(".")
        .append(call.getSignature().getName())
        .append(".")
        .append(genKeyByParam(args));
        System.out.println("key为:" + key.toString());
    System.out.println("加密后的key为:" + EncryptUtil.encodeMD5(key.toString()));
        String md5KeyString = EncryptUtil.encodeMD5(key.toString());
    //TODO 先到mongodb中查找,找不到再到memcached中找
        Object result = null;
        try{
        result = mongoDB.getDFSFile(mongoDB.getMongo(), md5KeyString);
        }catch(Exception e){
        logger.warn("mongodb缓存连接出错");
        }
        
        if(null == result){
        result = fetchDataFromMemcachCache(md5KeyString);  
        }
        if("NULL".equalsIgnoreCase((String)result)){
        return null;
        }
    if(null == result){
result = call.proceed();
int size = SizeCalculator.calcSize((Serializable) result);
if(size > ORVER_SIZE){
//TODO 如果result大于1M,则往mongod缓存中添加
byte[] byteArr = ObjectAndByte.toByteArray(result);
try{
mongoDB.uploadToDFS(md5KeyString, new ByteArrayInputStream(byteArr));
}catch(Exception e){
        logger.warn("mongodb缓存连接出错");
       }
}else{
if(null == result){
result = "NULL";
addToMemcachCache(md5KeyString,自定义的缓存时间,result);
return null;
}else{
addToMemcachCache(md5KeyString,result);
}

}
}
return result;


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表