package com.genersoft.iot.vmp.jt1078.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import java.lang.annotation.Annotation; import java.util.LinkedList; import java.util.List; public class ClassUtil { private static final Logger logger = LoggerFactory.getLogger(ClassUtil.class); public static Object getBean(Class clazz) { if (clazz != null) { try { return clazz.getDeclaredConstructor().newInstance(); } catch (Exception ex) { logger.error("ClassUtil:找不到指定的类", ex); } } return null; } public static Object getBean(String className) { Class clazz = null; try { clazz = Class.forName(className); } catch (Exception ex) { logger.error("ClassUtil:找不到指定的类"); } if (clazz != null) { try { //获取声明的构造器--》创建实例 return clazz.getDeclaredConstructor().newInstance(); } catch (Exception ex) { logger.error("ClassUtil:找不到指定的类", ex); } } return null; } /** * 获取包下所有带注解的class * * @param packageName 包名 * @param annotationClass 注解类型 * @return list */ public static List> getClassList(String packageName, Class annotationClass) { List> classList = getClassList(packageName); classList.removeIf(next -> !next.isAnnotationPresent(annotationClass)); return classList; } public static List> getClassList(String... packageName) { List> classList = new LinkedList<>(); for (String s : packageName) { List> c = getClassList(s); classList.addAll(c); } return classList; } public static List> getClassList(String packageName) { List> classList = new LinkedList<>(); try { ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver(); Resource[] resources = resourcePatternResolver.getResources(packageName.replace(".", "/") + "/**/*.class"); for (Resource resource : resources) { String url = resource.getURL().toString(); String[] split = url.split(packageName.replace(".", "/")); String s = split[split.length - 1]; String className = s.replace("/", "."); className = className.substring(0, className.lastIndexOf(".")); doAddClass(classList, packageName + className); } } catch (Exception e) { throw new RuntimeException(e); } return classList; } private static void doAddClass(List> classList, String className) { Class cls = loadClass(className, false); classList.add(cls); } public static Class loadClass(String className, boolean isInitialized) { Class cls; try { cls = Class.forName(className, isInitialized, getClassLoader()); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } return cls; } public static ClassLoader getClassLoader() { return Thread.currentThread().getContextClassLoader(); } }