- 如果一个 java 类在运行时作为字节码加载(例如通过 ASM 库或其他机制),它是否在 java 的类路径上?我没看到。
- 如果它不在java类路径上,如何扫描以这种方式加载的类的所有注释?
我使用谷歌反射和 3-rd 方库的自定义类加载器。
扫描类的工作原理如下:
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()
更新:我找到了答案你能找到使用反射的包中的所有类吗?说“如果有生成的类或远程交付的类,您将无法发现这些类。” 但是,没有证据。可以请任何人提供更多细节并确认吗?