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")); } }
結果
翻訳
ウェルカム
が使用され、あいまいさはありません。