Guice和属性文件

43

有人能否提供一个使用Google Guice从.properties文件中注入属性的示例?我被告知Guice能够在注入器启动时验证所有必需的属性是否存在。

目前我在guice wiki上找不到相关内容。

1个回答

73
您可以使用Names.bindProperties(binder(), getProperties())来绑定属性,其中getProperties返回一个Properties对象或一个Map<String, String>(将属性文件读取为Properties对象由您决定)。
然后,您可以使用@Named按名称注入它们。如果您有一个属性文件:
foo=bar
baz=true

你可以随意注入这些属性的值,例如:

@Inject
public SomeClass(@Named("foo") String foo, @Named("baz") boolean baz) {...}

Guice可以自动将从字符串转换为注入的类型,比如上面的boolean(假设字符串格式正确)。这适用于原始类型、枚举和类文字。


注意,使用guice 3.0-rc2(当前最新版本),只有在从guice.*包中导入@Named时才有效,而不是javax.inject.Named。 - Matthew Gilliard
@mjg123: 那不应该是真的...我自己实现了一个功能,使Guice@Named@javax.inject.Named相互替换。请查看此处中的测试,其中包括一个测试,以确保与Names.bindProperties一起使用正常工作。你试过了吗? - ColinD
1
是的,我确实尝试过 - 我看这个页面是因为我和楼主有同样的问题。我发现对于布尔值注入的情况,使用哪种方式确实很重要,尽管我承认我在Guice方面远非专家。 - Matthew Gilliard
@mjg123:我刚刚使用@javax.inject.Named和上面的示例(使用bindProperties)再次尝试了一下,一切都正常。如果您在某些情况下必须使用Guice的@Named,是否可以创建一个小测试来暴露它并在此处报告? - ColinD
当然,如果我能重现它,我会发布一个新的问题。 - Matthew Gilliard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接