package com.yuanchu.limslaboratory.utils;
|
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.core.io.Resource;
|
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
import org.springframework.core.io.support.ResourcePatternResolver;
|
import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
|
import org.springframework.core.type.classreading.MetadataReader;
|
import org.springframework.core.type.classreading.MetadataReaderFactory;
|
import org.springframework.stereotype.Component;
|
import org.springframework.util.ClassUtils;
|
|
import java.io.IOException;
|
import java.util.ArrayList;
|
import java.util.Enumeration;
|
import java.util.List;
|
import java.util.jar.JarEntry;
|
import java.util.jar.JarFile;
|
import java.io.File;
|
import java.net.JarURLConnection;
|
import java.net.URL;
|
|
/**
|
* @author 张宾
|
*/
|
@Component
|
@Slf4j
|
public class MyClassUtil {
|
|
private final static String RESOURCE_PATTERN = "/**/*.class";
|
|
/**
|
* 通过包名获取项目包下所有类
|
*
|
* @param BASE_PACKAGE 包名
|
* @return
|
*/
|
public static List<Class<?>> getClassList(String BASE_PACKAGE) {
|
List<Class<?>> classes = new ArrayList<>();
|
//spring工具类,可以获取指定路径下的全部类
|
ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
|
try {
|
String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX +
|
ClassUtils.convertClassNameToResourcePath(BASE_PACKAGE) + RESOURCE_PATTERN;
|
Resource[] resources = resourcePatternResolver.getResources(pattern);
|
//MetadataReader 的工厂类
|
MetadataReaderFactory readerfactory = new CachingMetadataReaderFactory(resourcePatternResolver);
|
for (Resource resource : resources) {
|
//用于读取类信息
|
MetadataReader reader = readerfactory.getMetadataReader(resource);
|
//扫描到的class
|
String classname = reader.getClassMetadata().getClassName();
|
log.info("classname={}", classname);
|
Class<?> clazz = Class.forName(classname);
|
classes.add(clazz);
|
}
|
} catch (Exception e) {
|
log.error("获取class异常:", e);
|
}
|
return classes;
|
}
|
}
|