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<Class<?>> getClassList(String packageName, Class<? extends Annotation> annotationClass) { 
 | 
        List<Class<?>> classList = getClassList(packageName); 
 | 
        classList.removeIf(next -> !next.isAnnotationPresent(annotationClass)); 
 | 
        return classList; 
 | 
    } 
 | 
  
 | 
    public static List<Class<?>> getClassList(String... packageName) { 
 | 
        List<Class<?>> classList = new LinkedList<>(); 
 | 
        for (String s : packageName) { 
 | 
            List<Class<?>> c = getClassList(s); 
 | 
            classList.addAll(c); 
 | 
        } 
 | 
        return classList; 
 | 
    } 
 | 
  
 | 
    public static List<Class<?>> getClassList(String packageName) { 
 | 
        List<Class<?>> 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<Class<?>> 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(); 
 | 
    } 
 | 
  
 | 
} 
 |