package com.yutou.nas.utils; import com.yutou.nas.interfaces.ObjectInterface; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.core.type.filter.TypeFilter; import org.springframework.stereotype.Controller; import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.RequestMapping; import java.lang.annotation.Annotation; import java.lang.reflect.Method; import java.text.SimpleDateFormat; import java.util.*; import static com.yutou.nas.utils.RedisTools.processOut; public class AppTools { public static String getToDayNowTimeToString() { return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); } public static void exec(String exec, ObjectInterface objectInterface, boolean isOutQQBot, boolean isInput) { try { Process process; if (AppTools.isRuntimeSystemOfWindow()) { process = Runtime.getRuntime().exec(new String[]{ "cmd", "/c", exec } ); } else { process = Runtime.getRuntime().exec(new String[]{ "sh", "-c", exec } ); } if (isInput) { processOut(process.getInputStream(), objectInterface, isOutQQBot); processOut(process.getErrorStream()); } else { processOut(process.getErrorStream(), objectInterface, isOutQQBot); processOut(process.getInputStream()); } process.destroy(); } catch (Exception e) { e.printStackTrace(); } } public static boolean isRuntimeSystemOfWindow() { return System.getProperty("os.name").contains("Windows"); } public static List scanClass(String classPath, Class annotation) { List classList = new ArrayList<>(); if (ObjectUtils.isEmpty(classPath)) { return classList; } ClassPathScanningCandidateComponentProvider provider = new ClassPathScanningCandidateComponentProvider(false); TypeFilter includeFilter = (metadataReader, metadataReaderFactory) -> true; provider.addIncludeFilter(includeFilter); Set beanDefinitionSet = new HashSet<>(); // 指定扫描的包名 Set candidateComponents = provider.findCandidateComponents(classPath); beanDefinitionSet.addAll(candidateComponents); beanDefinitionSet.forEach(beanDefinition -> { try { Class clazz = Class.forName(beanDefinition.getBeanClassName()); if (!ObjectUtils.isEmpty(annotation)) { if (!ObjectUtils.isEmpty(AnnotationUtils.getAnnotation(clazz, annotation))) { classList.add(clazz); } } else { classList.add(clazz); } } catch (ClassNotFoundException e) { e.printStackTrace(); } // System.out.println(definition.getBeanClassName()); }); return classList; } public static List getUrls(String packageName, String className) { List list = AppTools.scanClass(packageName, Controller.class); List urls = new ArrayList<>(); for (Class aClass : list) { if (className != null && !aClass.getSimpleName().equals(className)) { continue; } Method[] methods = aClass.getDeclaredMethods(); for (Method method : methods) { RequestMapping ls = method.getAnnotation(RequestMapping.class); if (ls != null) { urls.add(ls.value()[0]); } } } return urls; } }