按照上面的说明,我可以通过一些自定义SomeFrameworkComponent.class
在运行时动态加载ClassLoader
。它看起来像这样:
public class CustomClassLoader extends ClassLoader {
public CustomClassLoader() {
}
public Class defineClass(String location, byte[] classData, String name) {
java.nio.file.Path p = java.nio.file.Paths.get(location);
try {
return defineClass(name, Files.readAllBytes(p), 0, classData.length);
} catch (ClassFormatError | IOException e) {
e.printStackTrace();
}
return null;
}
}
之后我完全按照16.5. The InjectionTarget interface
的步骤操作,一切正常。但是,如果我更改.class文件并重新加载它,CDI将每次返回旧文件。正确地重新加载了新类,因为当我从newInstance()
返回的类上调用defineClass
时,它就像预期的那样是更新类的实例。
如果我理解正确,一旦bean被注册,它就被放入(绑定)Context
,这是bean的容器。对该bean的后续请求将从该容器中检索它。如果我希望能够随意销毁它,或者每个请求都从一个新的.class文件中获取一个新的,我将不得不创建一个支持它的自定义Context
。正确?
如果我的假设是正确的,那么我如何以编程方式指定.class对象应该去的自定义Context
?