根据配置文件

时间:2016-09-11 07:08:38

标签: java spring java-ee dependency-injection cdi

我有一个通过DI实现配置接口的类。

@Inject
private PRCConfiguration prcConfig;

PRCConfiguration接口有各种实现。目前它正在注入默认实现。我希望在配置文本文件中创建一个值,该文件将定义要注入的PRCCOnfiguration的特定实现。 我希望@Inject表示法验证配置文件中的值是什么,并基于注入特定实现。

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

@Inject @NewImplementation 
private PRCConfiguration prcConfig;

但我再次通过硬编码注入编译时间。

我的配置文件类似于

"injectconfig":"NewImplementation"

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

"injectconfig":"DifferentImplementation"

将注入不同的实现。

我需要通过CDI吗?

1 个答案:

答案 0 :(得分:2)

您可以使用producer methods来实现这样的目标。

基本上你只需创建一个CDI bean,该方法返回正确的配置实例并用pv3注释它。

这样的事情:

@Produces

在这种情况下,您应该使用@ApplicationScoped public class ConfigurationProducer { @Produces @ApplicationScoped public PRCConfiguration getConfig() { if( someCondition ) { return new NewConfigurationImpl(); } else { return new OldConfigurationImpl(); } } } 注释两个实现,否则您将获得不明确的依赖项错误。在实现上使用@Vetoed将告诉CDI使用生成器是获取@Vetoed实例的唯一方法。