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> getClassList(String BASE_PACKAGE) { List> 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; } }