You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:46:26