[英]Getting all classes with Javassist using a pattern
如何使用Javassist中的“com.stackoverflow。*”等模式获取所有类?
我发现只有2种方法:
1 /按姓名查找课程
CtClass ClassPool.getDefault().getCtClass("com.stackoverflow.user.name")
2 /查找具有全名的类列表:
CtClass[] ClassPool.getDefault().get(String [] arg0)
你可以使用一些库: 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);
迈克尔拉法格的建议是最好的方法。 Reflections库使用了javassist 。 基本上,javassist提供了一种从类或jar文件中读取原始字节代码并从中提取类元数据而无需实际加载类的方法,其中Reflection提供了更丰富的API来定位(通过类路径规范)并过滤集合你正在寻找的课程。
您可以仅使用javassist自己做同样的事情,但是您将重新创建Reflections库的某些部分。 您可以查看Reflections的源代码以了解它是如何工作的,但一般来说,它看起来像这样:
找到要扫描的类路径。 这通常是一组带有类文件树或一组Jar文件的目录,但也可能包含更复杂的结构,如WAR或EAR(Reflections支持相当不错)。
添加类文件所在的文件系统的根目录,或者将JAR文件引用添加到ClassPool实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.