SpringのAutowiredはコンストラクタに書く
概要
SpringでDIをする時使うAutowiredのアノテーションは使いやすいし便利ですよね!
しかし、使い方が複数あり、どの使い方がいいのか迷うところではあります。
私はよくコンストラクタで使うのですが、そうなった経緯を整理したいと思います。
Autowiredを設定できる方法
ざっくりと復習。Autowiredの設定方法は三種類あります。
フィールドインジェクション
フィールドに直接書くタイプの宣言方法です。
public class A {
@Autowired
private B b;
}
コンストラクタインジェクション
コンストラクタに書くタイプの宣言方法です。
public class A {
private final B b;
@Autowired
public A(B b) {
this.b = b;
}
}
セッターインジェクション
セッターに書くタイプの宣言方法です。
public class A {
private B b;
@Autowired
public void setB(B b) {
this.b = b;
}
}
なぜコンストラクタインジェクションを選ぶのか。
フィールドにfinalを使用することができて、不変性を担保できる。この理由が大きいですね。
こうすることで、処理の途中で書き換えられることがないので安全ですよね。
(保守で訳わからない人でもfinal書き換える時にコンパイルエラーになるから、わかる。本当に)
また、テストでnewしできるのが大きいですね。
テストでDIするか単なるnewで済ますのかを選択できるようになるのは、個人的に嬉しい。
逆にフィールドインジェクションを使用しているのはダメ
そもそも公式が非推奨としているものです。(たしか)
それを、わざわざ使用する意味はないでしょう。
サンプルソースとかでもフィールドインジェクションを使用しているのは信用しないようにしています。
そのぐらいダメだと個人的に思ってます。(すごく楽だけど)
まとめ
どんなソースでもめんどくさがらずにコンストラクタインジェクションを使用しましょうね。
Author And Source
この問題について(SpringのAutowiredはコンストラクタに書く), 我々は、より多くの情報をここで見つけました https://qiita.com/gosutesu/items/21c9635c88e3ededc676著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .