便携式CDI扩展,用于在运行时注入bean

时间:2018-05-29 10:10:35

标签: java java-ee cdi weld jboss-weld

参考:http://docs.jboss.org/weld/reference/latest-master/en-US/html_single/#_the_literal_injectiontarget_literal_interface

按照上面的说明,我可以通过一些自定义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

0 个答案:

没有答案