我有一个项目,其中包含一个通用部分和几个“特定于实现”,通过包装器使用,其中使用 URLClassLoader 加载实现(它具有公共类加载器作为父级)。现在,有一个由 @Foo 注释的通用类 A,它是特定于实现的。
@Foo
public class A { ... }
A 首先通过特定于实现的代码加载,因此它以 URLClassLoader 开头,但它尝试在父级中加载 - 它可以加载类,因为它是通用类(我需要能够在通用代码中实例化类,尽管我不需要访问注释)。
然后,实现检查注解 @Foo 但没有找到,因为 Java 运行时尝试通过 A.class.getClassLoader() 加载注解,这不是通用的。
显然,我无法更改 Java 运行时,但是有没有办法让 URLClassLoader 声明要由它加载的类(但将脏工作保留在父级上 - 并让他注册该类以便我可以实例化它由通用父级)?