Java各种相似名称区别

一、Java的 classpath

1.classpath:只会到你的classes路径中查找找文件。 2.classpath*:不仅会到classes路径,还包括jar文件中(classes路径)进行查找。

二、Spring的 classpath

一、“classpath”: 用于加载类路径(包括jar包)中的一个且仅一个资源;对于多个匹配的也只返回一个,所以如果需要多个匹配的请考虑“classpath*:”前缀;

@Test  
public void testClasspathPrefix() throws IOException {  
    ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();  
    //只加载一个绝对匹配Resource,且通过ResourceLoader.getResource进行加载  
    Resource[] resources=resolver.getResources("classpath:META-INF/INDEX.LIST");  
    Assert.assertEquals(1, resources.length);  
    //只加载一个匹配的Resource,且通过ResourceLoader.getResource进行加载  
    resources = resolver.getResources("classpath:META-INF/*.LIST");  
    Assert.assertTrue(resources.length == 1);             
}  

二、“classpath*”: 用于加载类路径(包括jar包)中的所有匹配的资源。带通配符的classpath使用“ClassLoader”的“Enumeration getResources(String name)”方法来查找通配符之前的资源,然后通过模式匹配来获取匹配的资源。如“classpath:META-INF/*.LIST”将首先加载通配符之前的目录“META-INF”,然后再遍历路径进行子路径匹配从而获取匹配的资源。

@Test  
public void testClasspathAsteriskPrefix () throws IOException {  
     ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();        
     //将加载多个绝对匹配的所有Resource  
    //将首先通过ClassLoader.getResources("META-INF")加载非模式路径部分  
    //然后进行遍历模式匹配  
    Resource[] resources=resolver.getResources("classpath*:META-INF/INDEX.LIST");  
    Assert.assertTrue(resources.length > 1);      
    //将加载多个模式匹配的Resource  
    resources = resolver.getResources("classpath*:META-INF/*.LIST");  
    Assert.assertTrue(resources.length > 1);    
}  

Comments