ジェネレータ注入を選択!


スプリング空席クエリー-継承関係
親のタイプで検索すると、子供のタイプも同時に検索されます.
したがって、すべてのjavaオブジェクトの最適な親オブジェクトタイプでクエリーを行うと、すべてのspringbinがクエリーされます.

不変


•ほとんどの依存関係注入では、アプリケーションの終了時に依存関係は変更されません.逆に、ほとんどの依存関係は、アプリケーションが閉じるまで変更できません.△一定に保たなければならない.
•モディファイヤ注入を使用する場合は、setXxxメソッドを開示する必要があります.
•誰も予期せぬ変更を許さない方法を開くのは良い設計方法ではありません.
•オブジェクトの作成時にコンストラクション関数が1回しか呼び出されないため、コンストラクション関数は後で呼び出されません.そのため、変わらず設計することができます.

漏れ落ちる


フレームワークなしで純粋なJavaコードをユニットテストします.
変更者依存関係:
public class OrderServiceImpl implements OrderService {
 private MemberRepository memberRepository;
 private DiscountPolicy discountPolicy;
 @Autowired
 public void setMemberRepository(MemberRepository memberRepository) {
 this.memberRepository = memberRepository;
 }
 @Autowired
 public void setDiscountPolicy(DiscountPolicy discountPolicy) {
 this.discountPolicy = discountPolicy;
 }
 //...
}
•@Autowiredがフレームワークで実行されている場合、依存関係がない場合はエラーが発生しますが、現在はフレームワークなしで純粋なJavaコードのみを使用してユニットテストを実行しています.
これでテストを実行できます.
@Test
void createOrder() {
 OrderServiceImpl orderService = new OrderServiceImpl();
 orderService.createOrder(1L, "itemA", 10000);
}
実際、実行結果はNPE(Null Point Exception)で、
割引ポリシーには依存関係の注入が欠けているためです.
コンストラクション関数注入を使用すると、下図のように注入データが欠けている場合、コンパイルエラーが発生します.
次に、IDEで必要な値を知ることができます.

finalキーワード


コンストラクション関数注入を使用すると、フィールドでfinalキーを使用できます.したがって,コンパイル時に生成者に値が設定されていないエラーが発生することを防止する.
覚えてろ!コンパイルエラーは世界で最も速く、最高のエラーです!
注:他のすべての注入メソッド(モディファイヤ注入を含む)は、コンストラクション関数の後に呼び出されるため、フィールドのfinalキー
使わない生成者注入方式のみfinalキーワードを使用できます.

整理する


•コンストラクション関数の注入方式を選択する理由はたくさんありますが、フレームワークに依存せず、純粋なJava言語の特徴をうまく表現できる方法です.
•デフォルトでは生成者注入が使用されます.必須値でない場合は、変更者注入方法を選択できます.
•生成者注入と修正者注入を同時に使用できます.
•常にジェネレータ注入を選択!また、たまに修正者を注入する必要がある場合は、フィールドコメントは使用しないほうがいいです.