项目中,有时需要通过特定的字符寻找特定的类,如mybatis,可以通过适配符寻找要扫描的目录。
我们自己也可以通过适配符寻找到自己想要的类,具体代码如下:
/**
* 通过包名获取class
*
* @author starmaark
* @version 2018年4月12日 下午5:55:18
*/
public class ClassTools {
private static final Logger log = LoggerFactory.getLogger(ClassTools.class);
private static final String RESOURCE_PATTERN = "/**/*.class";
public static Set<Class<?>> findPathMatchingResources(String locationPattern) {
// 第一个class类的集合
Set<Class<?>> classes = new LinkedHashSet<Class<?>>();
try {
String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX +
ClassUtils.convertClassNameToResourcePath(locationPattern) + RESOURCE_PATTERN;
ResourcePatternResolver resourceLoader = new PathMatchingResourcePatternResolver();
Resource[] source = resourceLoader.getResources(pattern);
MetadataReaderFactory readerFactory = new CachingMetadataReaderFactory(resourceLoader);
//System.out.println("length:" + source.length);
for (Resource resource : source) {
if (resource.isReadable()) {
MetadataReader reader = readerFactory.getMetadataReader(resource);
String className = reader.getClassMetadata().getClassName();
classes.add(Class.forName(className));
}
}
}catch (Exception e){
log.error("寻找符合条件的包失败",e);
}
return classes;
}
}
OK,上述代码执行成功!