spring中有一个<context:component-scan base-package="com.controller"/>
意思是说把com.controller包下面的所有类扫描出来。我现在也想做这样的功能
把com.controller下面所有类全部扫描出来,并加载到内存中去
比如说com.controller下面有以下类
com.controller.A
com.controller.B
com.controller.C
......我想扫描出这些类,然后
Class ca = Class.forName("com.controller.A");
Class cb = Class.forName("com.controller.B");
Class cc = Class.forName("com.controller.C");
...List list = new ArrayList();
list.add(ca);
list.add(cb);
list.add(cc);
...

解决方案 »

  1.   

    Spring 的这个功能是使用 ASM 工具实现的,直接分析字节码文件得来的。当然了,你也可以使用 JDK 中的反射进行处理。反射与 ASM 字节码分析得出的结果是一样的,但是反射需要加载类,而 ASM 不需要加载类。
      

  2.   

    通过getClass().getClassLoader(),如果返回的ClassLoader是一个URLClassLoader,则调用里面的getURLs()方法,再遍历它们。如果URL是一个文件目录,则再进入com.controller子目录,再调用listFiles返回所有文件
    如果URL是一个Jar文件,则使用JarInputStream遍历里面的Entry,得到com/controller的所有子Entry
      

  3.   

    代码你可以自己去看 Spring 的源代码。我们在这里也只能给你提供个思路!