gpt4 book ai didi

java - 根据配置文件中的值注入(inject)依赖项

转载 作者:行者123 更新时间:2023-11-30 02:48:28 25 4
gpt4 key购买 nike

我有一个类,它通过 DI 获取配置接口(interface)实现。

@Inject
private PRCConfiguration prcConfig;

PRCConfiguration 接口(interface)有多种实现。目前它正在注入(inject)默认实现。我希望在配置文本文件中创建一个值,该值将定义要注入(inject)的 PRCCONfiguration 的特定实现。我希望 @Inject 符号来验证配置文件中的值,并基于该值注入(inject)特定的实现。

我相信我们可以通过限定符注释不同的实现,然后注入(inject),比如

@Inject @NewImplementation 
private PRCConfiguration prcConfig;

但我再次通过硬编码在编译时注入(inject)。

我的配置文件类似于

"injectconfig":"NewImplementation"

注入(inject) @NewImplementation 实现,随后如果我想注入(inject)不同的实现。我可以将配置文件值更改为

"injectconfig":"DifferentImplementation"

并且将注入(inject)不同的实现。

我的要求可以通过 CDI 实现吗?

最佳答案

您可以使用producer methods实现类似的目标。

基本上,您只需创建一个 CDI bean,它是一个返回正确配置实例的方法,并用 @Produces 对其进行注释。

类似这样的事情:

@ApplicationScoped
public class ConfigurationProducer {

@Produces
@ApplicationScoped
public PRCConfiguration getConfig() {

if( someCondition ) {
return new NewConfigurationImpl();
}
else {
return new OldConfigurationImpl();
}

}

}

在这种情况下,您应该使用 @Vetoed 注释两个实现,否则您将收到不明确的依赖项错误。在实现上使用 @Vetoed 将告诉 CDI 使用生产者是获取 PRCConfiguration 实例的唯一方法。

关于java - 根据配置文件中的值注入(inject)依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39433696/

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