docs: public List<ResourceRef> getClassesFolderResources() throws IOException {
          if (classesFolderResources == null) {
              if (logger.isInfoEnabled()) {
                  logger.info("[classesFolder] start to found available classes folders ...");
              }
              List<ResourceRef> classesFolderResources = new ArrayList<ResourceRef>();
              Enumeration<URL> founds = resourcePatternResolver.getClassLoader().getResources("");
              while (founds.hasMoreElements()) {
                  URL urlObject = founds.nextElement();
                  if (!"file".equals(urlObject.getProtocol())) {
                      if (logger.isDebugEnabled()) {
                          logger.debug("[classesFolder] Ignored classes folder because "
                                  + "not a file protocol url: " + urlObject);
                      }
                      continue;
                  }
                  String path = urlObject.getPath();
                  Assert.isTrue(path.endsWith("/"));
  //                if (!path.endsWith("/classes/") && !path.endsWith("/bin/")) {
  //                    if (logger.isInfoEnabled()) {
  //                        logger.info("[classesFolder] Ignored classes folder because "
  //                                + "not ends with '/classes/' or '/bin/': " + urlObject);
  //                    }
  //                    continue;
  //                }
                  File file;
                  try {
                      file = new File(urlObject.toURI());
                  } catch (URISyntaxException e) {
                      throw new IOException(e);
                  }
                  if (file.isFile()) {
                      if (logger.isDebugEnabled()) {
                          logger.debug("[classesFolder] Ignored because not a directory: "
                                  + urlObject);
                      }
                      continue;
                  }
                  Resource resource = new FileSystemResource(file);
                  ResourceRef resourceRef = ResourceRef.toResourceRef(resource);
                  if (classesFolderResources.contains(resourceRef)) {
                      // 删除重复的地址
                      if (logger.isDebugEnabled()) {
                          logger.debug("[classesFolder] remove replicated classes folder: "
                                  + resourceRef);
                      }
                  } else {
                      classesFolderResources.add(resourceRef);
                      if (logger.isDebugEnabled()) {
                          logger.debug("[classesFolder] add classes folder: " + resourceRef);
                      }
                  }
              }
              // 删除含有一个地址包含另外一个地址的
              Collections.sort(classesFolderResources);
              List<ResourceRef> toRemove = new LinkedList<ResourceRef>();
              for (int i = 0; i < classesFolderResources.size(); i++) {
                  ResourceRef ref = classesFolderResources.get(i);
                  String refURI = ref.getResource().getURI().toString();
                  for (int j = i + 1; j < classesFolderResources.size(); j++) {
                      ResourceRef refj = classesFolderResources.get(j);
                      String refjURI = refj.getResource().getURI().toString();
                      if (refURI.startsWith(refjURI)) {
                          toRemove.add(refj);
                          if (logger.isInfoEnabled()) {
                              logger.info("[classesFolder] remove wrapper classes folder: " //
                                      + refj);
                          }
                      } else if (refjURI.startsWith(refURI) && refURI.length() != refjURI.length()) {
                          toRemove.add(ref);
                          if (logger.isInfoEnabled()) {
                              logger.info("[classesFolder] remove wrapper classes folder: " //
                                      + ref);
                          }
                      }
                  }
              }
              classesFolderResources.removeAll(toRemove);
              //
              this.classesFolderResources = new ArrayList<ResourceRef>(classesFolderResources);
              if (logger.isInfoEnabled()) {
                  logger.info("[classesFolder] found " + classesFolderResources.size()
                          + " classes folders: " + classesFolderResources);
              }
          } else {
              if (logger.isInfoEnabled()) {
                  logger.info("[classesFolder] found cached " + classesFolderResources.size()
                          + " classes folders: " + classesFolderResources);
              }
          }
          return Collections.unmodifiableList(classesFolderResources);
      }