docs: public CacheKeyTO getCacheKey(Object target, String methodName, Object[] arguments, String keyExpression,
                                    String hfieldExpression, Object result, boolean hasRetVal) {
          String key = null;
          String hfield = null;
          if (null != keyExpression && keyExpression.trim().length() > 0) {
              try {
                  key = scriptParser.getDefinedCacheKey(keyExpression, target, arguments, result, hasRetVal);
                  if (null != hfieldExpression && hfieldExpression.trim().length() > 0) {
                      hfield = scriptParser.getDefinedCacheKey(hfieldExpression, target, arguments, result, hasRetVal);
                  }
              } catch (Exception ex) {
                  log.error(ex.getMessage(), ex);
              }
          } else {
              key = CacheUtil.getDefaultCacheKey(target.getClass().getName(), methodName, arguments);
          }
          if (null == key || key.trim().isEmpty()) {
              throw new IllegalArgumentException("cache key for " + target.getClass().getName() + "." + methodName + " is empty");
          }
          return new CacheKeyTO(config.getNamespace(), key, hfield);
      }