gpt4 book ai didi

cdi - Weld CDI 自定义范围中的种子值

转载 作者:行者123 更新时间:2023-12-04 12:52:32 26 4
gpt4 key购买 nike

来自 Guice 背景,我知道可以使用范围从范围中播种对象值。

  scope.seed(Key.get(SomeObject.class), someObject);

我想可以通过注册一个从 AbstractBoundContext 获取值的 Bean 来做到这一点。 ,但似乎很难找到仅从自定义范围中播种一个值的示例。如何创建一个自定义范围来播种可以在其他地方注入(inject)的值?

编辑:
我目前正在使用以下解决方法,可以将其注入(inject)拦截器以设置 Configuration进入作用域时,然后可以通过其线程本地提供程序注入(inject)。不过,我仍在寻找那些感觉不那么老套/与 Weld 中的范围/范围上下文系统更集成的选项。
@Singleton
public class ConfigurationProducer {

private final InheritableThreadLocal<Configuration> threadLocalConfiguration =
new InheritableThreadLocal<>();

@Produces
@ActiveDataSet
public ConfigurationConfiguration() {
return threadLocalConfiguration.get()
}

public void setConfiguration(Configuration configuration) {
threadLocalConfiguration.set(configuration);
}

}

最佳答案

答案是使用 AfterBeanDiscovery 事件注册一个自定义 bean,如下所示:

    event.addBean()
.createWith(ctx -> commandContext.getCurrentCommandExecution())
.addType(CommandExecution.class)
.addQualifier(Default.Literal.INSTANCE)
.scope(CommandScoped.class)
.beanClass(CommandExtension.class);

https://github.com/weld/command-context-example 上有一个非常复杂的示例。

关于cdi - Weld CDI 自定义范围中的种子值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38321560/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com