按名称搜索课程

时间:2013-05-15 14:39:43

标签: java java-ee reflection

我想在当前加载的所有类中搜索与给定模式匹配的类。

例如,我想做类似的事情:

List<Class<?>> classess = getClassesFromPattern("*.Entity*");

结果我得到了:

com.package.EntityA
com.package.EntityB
com.package.EntityC

我该如何实现?

3 个答案:

答案 0 :(得分:1)

使用corn-cps

很容易
List<Class<?>> classes = CPScanner.scanClasses(new PackageNameFilter(
                "com.package"), new ClassNameFilter("*Entity*"));

答案 1 :(得分:0)

首先执行Instrumentation.getInitiatedClasses(ClassLoader)(参见http://docs.oracle.com/javase/6/docs/api/java/lang/instrument/Instrumentation.html#getInitiatedClasses(java.lang.ClassLoader)),返回所有类的数组,其中loader是一个启动加载器。如果提供的加载器为null,则返回由引导类加载器启动的类。现在通过getInitiatedClasses方法

在结果返回中搜索模式

答案 2 :(得分:0)

这并不是你想要的那么简单。

Class.forName()根据您指定的完全限定类名检索一个类。

您可以分析类路径,读取所有类路径片段,然后将类读取为资源(jar文件和普通目录不同),并根据模式搜索类。

好消息是这样的图书馆存在。它名为Reflections。它允许通过各种标准获取类,包括实现的接口,注释和(可能)类名模式。它也是可扩展的,您可以根据需要添加自己的实现。