如何使用Javassist中的“com.stackoverflow。*”等模式获取所有类?
我发现只有两种方法:
1 /按姓名查找课程
@MyAnnotation
2 /查找具有全名的类列表:
CtClass ClassPool.getDefault().getCtClass("com.stackoverflow.user.name")
答案 0 :(得分:3)
您可以使用以下库: https://github.com/ronmamo/reflections
我认为你不能只用JRE课程来做到这一点。
doc:
中的示例Reflections reflections = new Reflections("my.project.prefix");
Set<Class<? extends SomeType>> subTypes =
reflections.getSubTypesOf(SomeType.class);
Set<Class<?>> annotated =
reflections.getTypesAnnotatedWith(SomeAnnotation.class);
答案 1 :(得分:3)
Michael Laffargue建议是最好的方法。 Reflections库使用javassist封面。基本上,javassist提供了一种从类或jar文件中读取原始字节代码并从中提取类元数据而无需实际加载类的方法,其中Reflection提供了更丰富的API来定位(通过类路径规范)并过滤集合你正在寻找的课程。
您可以仅使用javassist自己做同样的事情,但是您将重新创建Reflections库的某些部分。你可以看看思考&#39;源代码,看它是如何工作的,但一般来说,它看起来像这样:
找到要扫描的类路径。这通常是一组带有类文件树或一组Jar文件的目录,但也可能包含更复杂的结构,如WAR或EAR(Reflections支持得非常好)。
将类文件所在的文件系统的根目录或JAR文件引用添加到ClassPool实例。