11.2.3.3. 修飾子を使用したあいまいなインジェクションの解決
概要
このタスクは、あいまいなインジェクションを示し、修飾子を使用してあいまいさを取り除きます。あいまいな注入について詳しくは、「あいまいな依存関係または満たされていない依存関係について」。
例11.5 あいまいな注入
Welcome の 2 つの実装があります。1 つは変換し、もう 1 つは変換しません。そのような状況では、以下のインジェクションはあいまいであり、翻訳する Welcome を使用するように指定する必要があります。
public class Greeter {
private Welcome welcome;
@Inject
void init(Welcome welcome) {
this.welcome = welcome;
}
...
}
手順11.3 修飾子を使用したあいまいなインジェクションの解決
@Translatingという修飾子アノテーションを作成します。@Qualifier @Retention(RUNTIME) @Target({TYPE,METHOD,FIELD,PARAMETERS}) public @interface Translating{}翻訳を行う
Welcomeに@Translatingアノテーションを付けます。@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")); } }
結果
翻訳ウェルカム が使用され、あいまいさはありません。