jeecg_scott 发表于 2013-8-17 07:58:02

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

由于需要做一个统一的缓存,我用的是spring的环绕通知,切入匹配的方法前从缓存服务器获取数据,现在的问题是特殊情况特殊处理,比如某种数据的缓存只在缓存服务器存在一分钟,其他默认的30分钟,这就需要我获得该方法取得数据的缓存时间,再存入缓存,但是环绕通知貌似只能获得参数值,没有拿到参数名的方法http://www.oschina.net/js/ke/plugins/emoticons/images/9.gif代码如下,知道的同鞋指导讨论下啊
      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;
页: [1]
查看完整版本: spring的环绕通知能否获得被环绕的方法的参数名