人生のエラー集 -6ページ目

人生のエラー集

バグ出し率トップを誇るへっぽこプログラマーが発生させたエラーをメモのために残します。
同じエラーで悩む人の解決策になりますように…

趣味のことも書いたりしますが。

はい、今回のお話は、なぜか調べても調べても出てこなかったSpringでのお話です。

メインクラスを実行するときに引数を渡したいことありますよね。
これは当然なんですけど、その引数を別のクラスでも使いたいことありますよね。

これを実現するための一般的な方法は、
コンストラクタに渡す、setterを作ってそこにセットする。
という感じなんですけど、そもそも、メインクラスではrunだけしたい!
ということはないですか?

@SpringBootApplication
public class PleasureSample{

public static void main(String[] args) {
        SpringApplication.run(PleasureSample.class, args);
    }
}

ありますよね。
これだとコンストラクタもsetterも使えないです。
あと、呼び出したいクラスは@Autowiredしたいから
コンストラクタに引数渡すやり方はできないですよね。

そんなわけで、
Springでメインクラスのコマンドライン引数を別クラスで取得する方法
メイン 実行 引数 取得
Spring 引数 args 取得

いろいろ探しました。

ありませんでした。

仕方がないから自分で見つけました。割とあっさり。

ApplicationArgumentsを使いましょう。

具体的には、

@Component
public class TreasureService {

@Autowired
private ApplicationArguments arguments;

@PostConstruct
public void start(){
String[] args = arguments.getSourceArgs();
for(String arg : args){
System.out.println(arg);
}
}
}

これです。
@AutowiredでApplicationArgumentsをDIして、arguments.getSourceArgs()。
実行してみると、ちゃんと取得できていました。

調べても出てこないということは、みんな当然のように知っていることなんですかね。

調べても調べても見当違いなページに飛ばされた自分に、さようなら。