docs: private static String buildKey(String key, Map<String, Object> parameters) {
          // 匹配符合  :name 格式的参数
          Matcher matcher = PATTERN.matcher(key);
          if (matcher.find()) {
  
              StringBuilder builder = new StringBuilder();
  
              int index = 0;
  
              do {
                  // 提取参数名称
                  final String name = matcher.group(1).trim();
  
                  Object value = null;
  
                  // 解析  a.b.c 类型的名称 
                  int find = name.indexOf('.');
                  if (find >= 0) {
  
                      // 用  BeanWrapper 获取属性值
                      Object bean = parameters.get(name.substring(0, find));
                      if (bean != null) {
                          value = new BeanWrapperImpl(bean)
                                  .getPropertyValue(name.substring(find + 1));
                      }
  
                  } else {
  
                      // 获取参数值
                      value = parameters.get(name);
                  }
  
                  // 拼装参数值
                  builder.append(key.substring(index, matcher.start()));
                  builder.append(value);
  
                  index = matcher.end();
  
              } while (matcher.find());
  
              // 拼装最后一段
              builder.append(key.substring(index));
  
              return builder.toString();
          }
  
          return key;
      }