Portable CDI扩展运行时注入Bean:类重载后CDI返回旧实例及自定义Context配置问询
CDI动态重载类后实例未更新的问题咨询
我最近在做CDI环境下的类动态重载,先通过自定义ClassLoader实现了运行时加载SomeFrameworkComponent.class,代码如下:
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; } }
之后严格按照Weld文档里「16.5. The InjectionTarget interface」的步骤操作,初始运行一切正常。但当我修改.class文件并重新加载后,发现CDI每次返回的还是旧的实例;不过我用自定义ClassLoader返回的Class调用newInstance(),是能拿到更新后的实例的,这说明类确实已经被正确重载了。
我自己琢磨了下:是不是Bean注册之后就会绑定到Context容器里,后续的请求都会直接从这个容器里拿实例?如果我想要按需销毁实例,或者每次请求都从新的.class文件获取新实例,是不是得自己写一个支持这种功能的自定义Context?
想请教下各位,我的这个理解对不对?如果是对的,那该怎么通过编程方式给这个类的实例指定对应的自定义Context呢?
内容的提问来源于stack exchange,提问作者hrs
相关产品推荐
相关产品推荐

