是否可以在@Provides 之上使用自定义注释而不是@Named?
Is it possible to use custom annotations instead of @Named in top of @Provides?
假设我们想要@Inject
个字符串。我创建 Module
:
public class StringModule extends AbstractModule{
@Provides
String black() {
return "black";
}
@Provides
String white() {
return "white"
}
}
现在我要求输入值:
@Inject
private String wantWhiteHere;
显然 Guice 会抛出错误,因为绑定不明确。我知道如果我像这样使用 @Named
注释,我可以获得 white
:
public class StringModule extends AbstractModule{
@Named("black")
@Provides
String black() {
return "black";
}
@Named("white")
@Provides
String white() {
return "white"
}
}
然后:
@Named("white")
@Inject
private String iGotWhiteHere;
但我想要的是:
public class StringModule extends AbstractModule{
@Black
@Provides
String black() {
return "black";
}
@White
@Provides
String white() {
return "white"
}
}
.
@White
@Inject
private String tryingToGetWhiteHere;
这可能吗? 当我这样做时出现异常:
A binding to java.lang.String was already
configured...
有什么地方可以配置来实现它吗?
我的 Guice 版本是 4.2.3
使用@Qualifier
是的,这是可能的。确保您有以下声明:
@javax.inject.Qualifier
@Target({ FIELD, PARAMETER, METHOD })
@Retention(RUNTIME)
public @interface White { }
您可以在 Guice 的官方 wiki 上找到 more info。
假设我们想要@Inject
个字符串。我创建 Module
:
public class StringModule extends AbstractModule{
@Provides
String black() {
return "black";
}
@Provides
String white() {
return "white"
}
}
现在我要求输入值:
@Inject
private String wantWhiteHere;
显然 Guice 会抛出错误,因为绑定不明确。我知道如果我像这样使用 @Named
注释,我可以获得 white
:
public class StringModule extends AbstractModule{
@Named("black")
@Provides
String black() {
return "black";
}
@Named("white")
@Provides
String white() {
return "white"
}
}
然后:
@Named("white")
@Inject
private String iGotWhiteHere;
但我想要的是:
public class StringModule extends AbstractModule{
@Black
@Provides
String black() {
return "black";
}
@White
@Provides
String white() {
return "white"
}
}
.
@White
@Inject
private String tryingToGetWhiteHere;
这可能吗? 当我这样做时出现异常:
A binding to java.lang.String was already configured...
有什么地方可以配置来实现它吗?
我的 Guice 版本是 4.2.3
使用@Qualifier
是的,这是可能的。确保您有以下声明:
@javax.inject.Qualifier
@Target({ FIELD, PARAMETER, METHOD })
@Retention(RUNTIME)
public @interface White { }
您可以在 Guice 的官方 wiki 上找到 more info。