Spring PathMatchingResourcePatternResolver


Spring PathMatchingResourcePatternResolver

PathMatchingResourcePatternResolver是ResourcePatternResolver的實現來,用來解析一個或多個匹配資源的指定資源位置路徑,資源路徑可能是唯一的,也可能是包含classpath*:前綴,或者匹配Ant風格的特殊表達式。
比如 file:C:/context.xml,classpathZ:/context.xml,/WEB-INF/context.xml,將會返回一個resource實例對象

繼承體系參考:資源訪問

其主要屬性如下

//主要用於程序運行狀態中,動態獲取方法的信息
@Nullable
private static Method equinoxResolveMethod;
//資源加載類
private final ResourceLoader resourceLoader;
//用來匹配Ant風格的匹配規則
private PathMatcher pathMatcher = new AntPathMatcher();
//根據給定的資源路徑或Ant風格的路徑匹配符合的資源文件加載為Resource對象
@Override
public Resource[] getResources(String locationPattern) throws IOException {
   Assert.notNull(locationPattern, "Location pattern must not be null");
    //判斷是否以classpath*開頭
   if (locationPattern.startsWith(CLASSPATH_ALL_URL_PREFIX)) {
      // a class path resource (multiple resources for same name possible)
      if (getPathMatcher().isPattern(locationPattern.substring(CLASSPATH_ALL_URL_PREFIX.length()))) {
         //根據Ant風格給定的字符串路徑匹配所有的資源對象
         return findPathMatchingResources(locationPattern);
      }
      else {
         // 查找所classpath路徑下的符合規則的資源
         return findAllClassPathResources(locationPattern.substring(CLASSPATH_ALL_URL_PREFIX.length()));
      }
   }
   else {
      // 如果路徑資源以war:開頭,則執行如下加載資源的方法
      int prefixEnd = (locationPattern.startsWith("war:") ? locationPattern.indexOf("*/") + 1 :
            locationPattern.indexOf(':') + 1);
      if (getPathMatcher().isPattern(locationPattern.substring(prefixEnd))) {
         // a file pattern
         return findPathMatchingResources(locationPattern);
      }
      else {
         // a single resource with the given name
         return new Resource[] {getResourceLoader().getResource(locationPattern)};
      }
   }
}

測試如下:

PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();

@Test
public void testfindPathMatchingResources() throws Exception {

    Resource[] resource = pathMatchingResourcePatternResolver.getResources("classpath*:/config/*.txt");

    for (int i = 0; i < resource.length; i++) {
        String filename = resource[i].getFilename();
        URL url = resource[i].getURL();
        System.out.println(url);
    }
    // System.out.println(resource);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM