【发布时间】:2015-04-13 06:29:40
【问题描述】:
- 如果 java 类在运行时作为字节码加载(例如,通过 ASM 库或其他机制),它是否位于 java 的类路径中?我没看到。
- 如何扫描以这种方式加载的类的所有注解,如果它不在 java 类路径上?
我使用谷歌反射和第三方库的自定义类加载器。
扫描类的工作原理如下:
Reflections reflections = new Reflections(ClasspathHelper.forPackage("com.mypackage",
MyCustomClassLoader),
new SubTypesScanner(), new TypeAnnotationsScanner());
Set<Class<?>> myClasses = reflections.getTypesAnnotatedWith(MyAnnotation.class);
MyAnnotation - 标记为@Retention(RetentionPolicy.RUNTIME)。 以上(在一个类中)由JVM在运行时动态加载。
可以看出,在幕后,Reflections 尝试使用 2 个默认静态和上下文的类加载器来扫描所有 URL。
反射.scan()
更新:我找到了一个答案 Can you find all classes in a package using reflection?,说“如果有生成的类,或者远程交付,您将无法发现这些类。”但是,没有证据。 请任何人对此提供更多详细信息并确认?
【问题讨论】:
标签: java reflection classloader reflections