FrameworkでDIする3つの方法2019年4月12日SpringでDIコンテナの管理対象となったインスタンスをインジェクション(注入)する3つの方法をメモしておきます。目次コンストラクタインジェクションコンストラクタを利用したDIで、最も推奨されるDIの方法です。Frameworkを使用しないテストでも引数にモックを渡せるデメリット依存するBeanが増えるにつれて引数が多くなる(クラスの責務の多さに気づける)循環依存A<->Bの場合は利用できない(循環依存に気づける)残りの2つのインジェクション方法とは異なり、フィールドをfinal化できたりテストがしやすかったりするのが特徴です。デメリットにあげている点も裏を返せばメリットになります。Springチームが推奨しているインジェクション方法なので、基本的にはこのインジェクション方法を使うようにしましょう。ちなみに、LomBokを使用すると、以下のようにコードが簡潔に書けます。フィールドインジェクションフィールドに直接@Autowiredを付与してDIする方法です。メリット簡潔に書けるデメリットフィールドをfinal化できないテスト時にモックオブジェクトに置き換えできない(置き換えづらい)なんといってもコードを簡潔に書けるが特徴です。SpringのDIコンテナを使用することが前提になるので、テストコード作成時にDIコンテナを使わないとモック化できなかったり、テスト時のコンテナ起動に時間がかかったりします。あと、フィールドをfinal化できないのもデメリットですね。セッターインジェクションsetterを利用してDIする方法です。メリットテスト時にモックオブジェクトに置き換えやすいデメリット依存するBeanが多いとsetterが多くなるフィールドをfinalにできない外部からフィールドを上書きできるコンストラクタインジェクションはコンストラクタ呼び出し時にDIの設定が完了(それ以降、不変)するのに対し、セッターインジェクションはsetterを利用するので書き換えが起こりえます。いうこともあり、他の2つのインジェクション方法と異なり、あまり使われていない印象です。FrameworkでDIする方法は以下の3つです。コンストラクタインジェクションフィールドインジェクションセッターインジェクション基本的には推奨されているコンストラクタインジェクションを使うようにしましょう。Worldを表示するだけの簡単なWebページを作成してみます。closed.」が出たときの対処法をメモしておきます。3.0からテンプレートモードが追加されました。これにより、メールやSlackの本文をテンプレートとして定義できるようになりました。便利そうなのでさっそく使ってみました。BootでMyBatisを使ったときのメモを残しておきます。具体的には、MyBatisを使ってSELECT文を発行し、結果をコンソールに表示するプログラムを作ります。Bootで非同期処理を行う方法をメモしておきます。Bootでは、非同期処理用のアノテーション@Asyncが用意されているので、非同期処理が比較的簡単に実装できます。Bootで定期的に処理を実行する方法プロフィールdonchan技術を磨きたくてSIerからWeb業界に転職したエンジニア。技術メモを書いています。