単純なSpring Applicationで、コマンドラインから動かしたい処理を指定する方法
これは何
単純なSpring Applicationで、コマンドラインから動かしたい処理を指定する方法のメモ。
やりたいこと
- Spring Batchではない、通常のコマンドラインアプリケーション。
- Spring資源を使いたい。
- 起動する処理は引数で指定したい。
方法
SpringApplication.run
の戻り値でApplicationContext
が取得できる。ApplicationContext.getBean(bean名称)
で動かしたいBeanが取得できる。
ソース
Gistで 多田さんに教えてもらった記述をほぼそのままコピペしている。
Componentの名前を指定しない時
package ta.su.simple; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { ApplicationContext context = SpringApplication.run(DemoApplication.class, args); //context.containsBean(bean名称) でそのBeanが存在するか事前にチェックが出来る。 if(!context.containsBean("cBean")) { throw new IllegalArgumentException("不正なBean名を指定した"); } //Bean名称はクラス名称と同一になる。 Bean bean = context.getBean("ABean", Bean.class); bean.run(); } } interface Bean { public void run(); } @Component class ABean implements Bean { @Override public void run() { System.out.println("aBeanが呼ばれた"); } } @Component class BBean implements Bean { @Override public void run() { System.out.println("bBeanが呼ばれた"); } }
Componentの名前を指定する時
package ta.su.simple; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { ApplicationContext context = SpringApplication.run(DemoApplication.class, args); if(!context.containsBean("cBean")) { throw new IllegalArgumentException("不正なBean名を指定した"); } //Bean名称はComponentアノテーションで指定した名称になる。 Bean bean = context.getBean("aBean", Bean.class); bean.run(); } } interface Bean { public void run(); } @Component("aBean") class ABean implements Bean { @Override public void run() { System.out.println("aBeanが呼ばれた"); } } @Component("bBean") class BBean implements Bean { @Override public void run() { System.out.println("bBeanが呼ばれた"); } }