<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      歡迎訪問『www.rzrgm.cn/blog-ice』

      1.自定義類加載器  ExternalClassLoader

      2.創建掃描類 ClassPathScanner

      package com.tool.scan;
      
      import java.io.File;
      import java.util.List;
      
      public class ScanTest {
      
          public static void main(String[] args) {
              try {
                  // 外部文件夾路徑
                  File externalDir = new File("D:/tem");
      
                  // 掃描指定包下的類
                  ClassPathScanner scanner = new ClassPathScanner(externalDir, "a.b");
                  List<Class<?>> classes = scanner.scanClasses();
      
                  // 處理注解
                  AnnotationProcessor.processAnnotations(classes, MyAnnotation.class);
      
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
      
      
      package com.tool.scan;
      
      import java.io.File;
      import java.net.MalformedURLException;
      import java.net.URL;
      import java.net.URLClassLoader;
      
      public class ExternalClassLoader extends URLClassLoader {
          public ExternalClassLoader(File directory) throws MalformedURLException {
              super(new URL[]{directory.toURI().toURL()}, Thread.currentThread().getContextClassLoader());
          }
      
          public Class<?> loadClass(String className) throws ClassNotFoundException {
              return super.loadClass(className);
          }
      }
      
      
      package com.tool.scan;
      import java.io.File;
      import java.io.IOException;
      import java.net.MalformedURLException;
      import java.net.URL;
      import java.util.ArrayList;
      import java.util.Enumeration;
      import java.util.List;
      import java.util.jar.JarEntry;
      import java.util.jar.JarFile;
      
      public class ClassPathScanner {
          private final ClassLoader classLoader;
          private final String basePackage;
      
          public ClassPathScanner(File directory, String basePackage) throws MalformedURLException {
              this.classLoader = new ExternalClassLoader(directory);
              this.basePackage = basePackage;
          }
      
          public List<Class<?>> scanClasses() throws IOException, ClassNotFoundException {
              List<Class<?>> classes = new ArrayList<>();
              String path = basePackage.replace('.', '/');
      
              // 掃描目錄
              Enumeration<URL> resources = classLoader.getResources(path);
              while (resources.hasMoreElements()) {
                  URL resource = resources.nextElement();
                  if (resource.getProtocol().equals("file")) {
                      File dir = new File(resource.getFile());
                      classes.addAll(findClassesInDirectory(dir, basePackage));
                  } else if (resource.getProtocol().equals("jar")) {
                      String jarPath = resource.getFile().substring(5, resource.getFile().indexOf("!"));
                      classes.addAll(findClassesInJar(new File(jarPath), path));
                  }
              }
      
              return classes;
          }
      
          private List<Class<?>> findClassesInDirectory(File directory, String packageName) throws ClassNotFoundException {
              List<Class<?>> classes = new ArrayList<>();
              if (!directory.exists()) {
                  return classes;
              }
      
              File[] files = directory.listFiles();
              if (files != null) {
                  for (File file : files) {
                      if (file.isDirectory()) {
                          classes.addAll(findClassesInDirectory(file, packageName + "." + file.getName()));
                      } else if (file.getName().endsWith(".class")) {
                          String className = packageName + '.' + file.getName().substring(0, file.getName().length() - 6);
                          classes.add(classLoader.loadClass(className));
                      }
                  }
              }
      
              return classes;
          }
      
          private List<Class<?>> findClassesInJar(File jarFile, String path) throws IOException, ClassNotFoundException {
              List<Class<?>> classes = new ArrayList<>();
              try (JarFile jar = new JarFile(jarFile)) {
                  Enumeration<JarEntry> entries = jar.entries();
                  while (entries.hasMoreElements()) {
                      JarEntry entry = entries.nextElement();
                      String name = entry.getName();
                      if (name.startsWith(path) && name.endsWith(".class")) {
                          String className = name.replace('/', '.').substring(0, name.length() - 6);
                          classes.add(classLoader.loadClass(className));
                      }
                  }
              }
              return classes;
          }
      }
      
      
      package com.tool.scan;
      
      import java.lang.annotation.Annotation;
      import java.util.List;
      
      public class AnnotationProcessor {
          public static <A extends Annotation> void processAnnotations(List<Class<?>> classes, Class<A> annotationClass) {
              for (Class<?> clazz : classes) {
                  if (clazz.isAnnotationPresent(annotationClass)) {
                      A annotation = clazz.getAnnotation(annotationClass);
                      System.out.println("類 " + clazz.getName() + " 標注了 " + annotationClass.getSimpleName() + " 注解");
                      // 處理注解屬性
                      processAnnotationAttributes(annotation);
                  }
              }
          }
      
          private static <A extends Annotation> void processAnnotationAttributes(A annotation) {
              // 這里可以通過反射獲取注解的屬性值
              java.lang.reflect.Method[] methods = annotation.annotationType().getDeclaredMethods();
              for (java.lang.reflect.Method method : methods) {
                  try {
                      System.out.println("  屬性: " + method.getName() + " = " + method.invoke(annotation));
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
              }
          }
      }

       

      posted on 2025-07-09 20:27  仙路盡頭誰為峰  閱讀(6)  評論(0)    收藏  舉報
      這里是自由發揮的天堂
      主站蜘蛛池模板: 国产成人高清精品免费软件| 亚洲夂夂婷婷色拍ww47| 欧美人与动人物牲交免费观看 | 欧美私人情侣网站| 亚洲东京色一区二区三区| 丰满妇女强制高潮18xxxx | 男人猛戳女人30分钟视频大全| 九九热在线免费视频观看| 久久国产免费直播| 欧美在线观看www| 激情综合网激情国产av| 中文国产乱码在线人妻一区二区| 商都县| 奇米四色7777中文字幕| 99久久国产成人免费网站| 国产成人啪精品视频免费软件 | 中文字幕av无码不卡| 无码人妻一区二区三区av| 天堂www在线中文| 亚洲天堂男人天堂女人天堂| 免费看无码自慰一区二区| 无码人妻丝袜在线视频| 国产综合视频一区二区三区| 无码人妻斩一区二区三区 | 曰韩亚洲av人人夜夜澡人人爽| 中文有无人妻vs无码人妻激烈| 亚洲精品中文字幕一区二 | 丰满少妇呻吟高潮经历| 亚洲二区中文字幕在线| 乱码中文字幕| 欧美性XXXX极品HD欧美风情 | 亚洲精品日韩中文字幕| 视频一区二区三区四区五区| 免费午夜无码片在线观看影院| 精品国产迷系列在线观看| 午夜福利日本一区二区无码| 欧美白妞大战非洲大炮| 闵行区| 国产欧美日韩免费看AⅤ视频| 一本一本久久A久久精品综合不卡| 少妇高潮喷水在线观看|