JavaSE環境でCDIを試したい
やりたいこと
JavaSE環境でCDIを試したい。
どうやらWeldでできるようです。
準備(pom.xml)
<dependency> <groupId>org.jboss.weld.se</groupId> <artifactId>weld-se</artifactId> <version>2.3.3.Final</version> <scope>compile</scope> </dependency>
コード
CDIビーン
package jp.gr.java_conf.ksino.weldtest.cdibeans; public interface Hero { public void showName(); }
package jp.gr.java_conf.ksino.weldtest.cdibeans; public class Superman 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(); } }
実行コード
package jp.gr.java_conf.ksino.weldtest; import javax.enterprise.inject.Instance; import jp.gr.java_conf.ksino.weldtest.logic.Logic; import org.jboss.weld.environment.se.Weld; import org.jboss.weld.environment.se.WeldContainer; public class Main { public static void main(String[] args) { Weld weld = new Weld(); WeldContainer container = weld.initialize(); Instance<Logic> instance = container.select(Logic.class); Logic logic = instance.get(); logic.call(); weld.shutdown(); } }