7.3.2. 使用 Qualifier 解决 Ambiguous Injection
您可以使用限定符解决模糊注入问题。阅读有关 Ambiguous 或 Unsatisfidened 依赖项 模糊注入的更多信息。
以下示例模糊不清,并且有两个 Welcome 实施 , 一种是转换,另一个是没有实现。需要指定注入以使用转换 Welcome。
示例:Ambiguous Injection
public class Greeter {
private Welcome welcome;
@Inject
void init(Welcome welcome) {
this.welcome = welcome;
}
...
}
使用 Qualifier 解析 Ambiguous Injection
要解决模糊注入,请创建一个名为
@Translating的限定注释:@Qualifier @Retention(RUNTIME) @Target({TYPE,METHOD,FIELD,PARAMETERS}) public @interface Translating{}使用
@Translating 注释给转换 Welcome标注:@Translating public class TranslatingWelcome extends Welcome { @Inject Translator translator; public String buildPhrase(String city) { return translator.translate("Welcome to " + city + "!"); } ... }请求注入中的
Welcome。您必须明确请求合格的实施,类似于工厂方法模式。这种不确定性是在注入点解决的。public class Greeter { private Welcome welcome; @Inject void init(@Translating Welcome welcome) { this.welcome = welcome; } public void welcomeVisitors() { System.out.println(welcome.buildPhrase("San Francisco")); } }