如何将带注释的常量重新绑定到另一个名称?

时间:2013-01-29 14:49:29

标签: java guice

假设我有一个值绑定到某个模块中带有“xxx”注释的字符串,但是我希望从另一个注释名称(比如“yyy”)获得此常量。无论如何我可以给出这样的同义词吗?

例如,某些模块包含:

bindConstant().annotatedWith(Names.named("xxx")).to("testing");

我想写一些类似的东西:

bindConstant().annotatedWith(Names.named("yyy")).to(value of xxx);

1 个答案:

答案 0 :(得分:3)

如果你看一下ConstantBindingBuilderImpl.java,你会发现它只是用于从基元推断出绑定类型的语法糖。 Guice不允许您将常量绑定到另一个绑定,但它确实允许您将“正常”绑定绑定到另一个绑定。

bind(String.class).annotatedWith(Names.named("yyy"))
    .to(Key.get(String.class, Names.named("xxx")));

这看起来没有bindConstant()那么有用,因为你必须明确指定绑定的类型,但实际情况是bindConstant()在幕后悄悄地为你做这件事。 (顺便说一句,Guice中的String元素有点神奇 - 如果你将注释绑定到String,你可以inject it as a variety of other primitive types。这就是Names.bindProperties可以注入各种类型的原因,而不仅仅是字符串。)