docs: private ParamExistenceChecker[] compileParamExistenceChecker() {
  
          IfParamExists ifParamExists = method.getAnnotation(IfParamExists.class);
          //没标注IfParamExists或者标注了IfParamExists("")都认为不作检查
          if (ifParamExists == null || ifParamExists.value().trim().length() == 0) {
              return new ParamExistenceChecker[] {};
          }
  
          List<ParamExistenceChecker> checkers = new ArrayList<ParamExistenceChecker>(); //所有判断条件的列表
          String value = ifParamExists.value();
  
          //可以写多个判断条件，以这样的形式: type&subtype=value&anothername=value2
          String[] terms = StringUtils.split(value, "&");
          Assert.isTrue(terms.length >= 1); //这个应该永远成立
  
          //按'&'分割后，每一个term就是一个检查条件
          for (final String term : terms) {
              final int index = term.indexOf('='); //找'='
              if (index == -1) { //没有=说明只有参数名，此时term就是参数名
                  checkers.add(new ParamExistenceChecker() {
  
                      final String paramName = term.trim();
  
                      @Override
                      public int check(Map<String, String[]> params) {
                          String[] paramValues = params.get(paramName);
                          if (logger.isDebugEnabled()) {
                              logger.debug(this.toString() + " is checking param:" + paramName + "="
                                      + Arrays.toString(paramValues));
                          }
  
                          //规则中没有约束参数值，所以只要存在就ok
                          if (paramValues != null && paramValues.length > 0) {
                              return 10;
                          } else {
                              return -1;
                          }
                      }
                  });
              } else { //term中有'='
  
                  final String paramName = term.substring(0, index).trim(); //参数名
                  final String expected = term.substring(index + 1).trim(); //期望的参数值
  
                  if (expected.startsWith(":")) { //expected是正则表达式
                      Pattern tmpPattern = null;
                      try {
                          tmpPattern = Pattern.compile(expected.substring(1));
                      } catch (PatternSyntaxException e) {
                          logger.error("@IfParamExists pattern error, " + controllerClass.getName()
                                  + "#" + method.getName(), e);
                      }
                      final Pattern pattern = tmpPattern; //转成final的
                      checkers.add(new ParamExistenceChecker() {
  
                          @Override
                          public int check(Map<String, String[]> params) {
                              String[] paramValues = params.get(paramName);
                              if (logger.isDebugEnabled()) {
                                  logger.debug(this.toString() + " is checking param:" + paramName
                                          + "=" + Arrays.toString(paramValues) + ", pattern="
                                          + pattern.pattern());
                              }
                              if (paramValues == null) { //参数值不能存在就不能通过
                                  return -1;
                              }
  
                              for (String paramValue : paramValues) {
                                  if (pattern != null && pattern.matcher(paramValue).matches()) {
                                      return 12;
                                  }
                              }
                              return -1;
                          }
                      });
                  } else { //expected是常量字符串，包括空串""
                      checkers.add(new ParamExistenceChecker() {
  
                          @Override
                          public int check(Map<String, String[]> params) {
                              String[] paramValues = params.get(paramName);
                              if (logger.isDebugEnabled()) {
                                  logger.debug(this.toString() + " is checking param:" + paramName
                                          + "=" + Arrays.toString(paramValues) + ", expected="
                                          + expected);
                              }
                              if (paramValues == null) { //参数值不能存在就不能通过
                                  return -1;
                              }
  
                              for (String paramValue : paramValues) {
                                  if (expected.equals(paramValue)) {
                                      return 13;// 13优先于正则表达式的12
                                  }
                              }
                              return -1;
                          }
                      });
                  }
              }
          }
          return checkers.toArray(new ParamExistenceChecker[] {});
      }