CDIでインジェクトするクラスを切り替える
やりたいこと
CDIでインジェクトするCDIビーンを切り替える方法にはいくつかありますが、ここでは@Alternativeとbeans.xmlを使います。
実装
CDIビーン
package jp.gr.java_conf.ksino.weldtest.cdibeans; public interface Hero { public void showName(); }
package jp.gr.java_conf.ksino.weldtest.cdibeans; import javax.enterprise.inject.Alternative; @Alternative public class Superman implements Hero { @Override public void showName() { System.out.println("スーパーマン"); } }
package jp.gr.java_conf.ksino.weldtest.cdibeans; import javax.enterprise.inject.Alternative; @Alternative public class Batman implements Hero { @Override public void showName() { System.out.println("バットマン"); } }
インジェクションポイント
package jp.gr.java_conf.ksino.weldtest.logic; import javax.inject.Inject; import jp.gr.java_conf.ksino.weldtest.cdibeans.Hero; public class Logic { @Inject private Hero hero; public void call() { hero.showName(); } }
実行結果
バットマン