【发布时间】:2021-09-30 13:39:40
【问题描述】:
我有一个应用程序需要从属性文件中读取一些配置值,然后使用 Guice 的 @Named 注释注入这些值。我目前在我的模块中做这样的事情:
@Override
protected void configure() {
try {
Properties properties = getProperties();
Names.bindProperties(binder(), properties);
binder().bind(MyApi.class);
} catch (Exception e) {
log.error(e.getMessage());
throw new RuntimeException(e);
}
}
然后在我的应用程序中,我执行以下操作:
public class MyApi
{
@Inject
@Named("ftp.dir")
public String ftpDirectory;
}
这种方法可以很好地注入原始值,但现在我需要注入一个字符串列表。如果我只是添加注入
@Inject
@Named("mail.to")
public List<String> mailTo;
对于像这样的属性文件:
#Properties
ftp.dir=/opt/my/dir
mail.to=foo@bar.com, abc@123.com
那么 guice 会抛出一个异常说
'没有实现 java.util.List
注释 @google.inject.name.Named(value=mail.to) 已绑定。
我还看到了一些其他类似的问题,例如: Guice : Inject an ArrayList of Strings 和Injecting list of strings in Guice 但是所有的解决方案都采用为字段添加显式绑定的方法。
有什么方法可以在 guice 中处理集合,而无需手动从属性文件中提取它们并添加显式绑定?
【问题讨论】:
-
你能把
.properties文件包括进来吗? -
@GeorgeZ。我编辑了帖子以包含属性示例
标签: java dependency-injection collections properties guice