建议阅读:spring笔记-PathMatchingResourcePatternResolver - 简书
ResourcePatternResolver代码如下:
测试:
public class ClassUtilTest {
private static final String RESOURCE_PATTERN = "/**/*.class";
public static void main(String[] args) throws IOException {
getResource("com/alibaba/fastjson");
}
public static void getResource(String base_package) throws IOException {
ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
//1.加载本地class
//String pattern="com/demo/DateTest.class";
//2.加载jar包资源
//String pattern="com/alibaba/fastjson/JSON.class";
//3.以classpath*通配符的方式加载本地class
//String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + org.springframework.util.ClassUtils.convertClassNameToResourcePath(base_package) + RESOURCE_PATTERN;
//4.以classpath*通配符的方式加载jar包class
String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + org.springframework.util.ClassUtils.convertClassNameToResourcePath(base_package) + RESOURCE_PATTERN;
System.out.println(pattern);
Resource[] resources = resourcePatternResolver.getResources(pattern);
MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resourcePatternResolver);
for (Resource resource : resources) {
MetadataReader reader = metadataReaderFactory.getMetadataReader(resource);
String classname = reader.getClassMetadata().getClassName();
System.out.println(classname);
}
}
}
总结:
以classpath*通配符来加载class,其实不管本地还是jar包的class,都可以使用/**/*.class