コンストラクタ噴射におけるソースコードのばね深さ分析

@Autowired注釈determineConstructorsFromBeanPostProcessors自動適しビルダーとインジェクター、そうでない場合は、引数なしでコンストラクタを使用して、注釈なし** @Autowiredをインスタンス化するかどうかを選択するための依存性注入の方法を:**引数なしのコンストラクタは、直接defaultConstructorを添加していませんコレクション。コンストラクタの数とは唯一のパラメータが存在する場合、このパラメータは、追加candidateConstructorsコンストラクタが設定されています。数際に、コンストラクタで2があり、かつcandidateConstructorsコレクションに引数のコンストラクタ、defaultConstructor(最初のコンストラクタ引数なし)はありません。コンストラクタ2つよりも多い数、および非引数コンストラクタケースの存在は、candidateConstructorsは空集合、すなわちないのコンストラクタを返します。**注釈が@Autowired場合:分析**必須属性:TRUE:requiredConstructor第1のセットは必要としてきた前に空でない場合は空であるかどうかを決定することは、スローするように二つの真の、コンストラクタ= trueを表します異常、その後、候補者がすでにあるヒット注釈付きコンストラクタが前に必要な、この時点で例外がスローされ、真であることを空言われている場合、空である設定かどうかを判断します。空のセットどちらが配置される場合requiredConstructorは、候補者が設定し配置しました。偽:直接コレクションに候補者。requiredConstructorセットが(存在または必要なビルダーの不在=真)空であるかどうかを判断する、いない場合は、デフォルトのコンストラクタも候補に設定されています。最後に、上記の候補者は、収集candidateConstructors確定申告に割り当てられています。#3。** 1まとめた理由(引数のコンストラクタを含まない)3つのコンストラクタを書き、何@Autowired注釈が存在しない、春は常にビーンをインスタンス化するために、引数なしのコンストラクタを使うのか?** A:いいえ注釈参照アプローチ:コンストラクタは2つだけ、と引数のコンストラクタがない場合は、引数なしのコンストラクタは直接初期化。以上の2つのコンストラクタは、空のセットが返された場合、すなわち、インスタンス化されます参照コンストラクタを使用することなく適切なビルダー、豆の初期化方法createBeanInstance最初のコードの第三端に次に参照を見つけることができません。また、これは何の注釈が存在しない理由を回答し、春には必ず引数なしのコンストラクタは、Beanのインスタンスを使用し、何の引数なしのコンストラクタが存在しない場合は、この時点で例外をスローします、ビーンのインスタンス化は失敗します。** 2、なぜ2つのコンストラクタをコメントアウトし、コンストラクタのパラメータ、および無@Autowired注釈を残して、春は道ビーンビーンを初期化するためにコンストラクタ・インジェクションを使用しますか?** A:いいえ、参照注釈アプローチ:このコンストラクタはインスタンス化し、パラメータが自然にIOC豆からだけコンストラクタのパラメータ、および、このコンストラクタを出しますが、として適用コンストラクタを返し取得しますこれは、注入されます。** 3、なぜ3つのコンストラクタを書き、そしてコンストラクタの1に@Autowired注釈をマークし、あなたは、通常のコンストラクタを注入することができますか?** A:注釈付き参考アプローチ:最終候補者は、適用可能なコンストラクタのセットは、当然のことながら、このセットが空の注釈でない場合は、空であり、かつ必要=真、またデフォルトコンストラクタのdefaultConstructorを設定するかどうかを判断コレクション内の候補者に参加し、注釈付きのコンストラクタを打つだけなので、最後にこの戦い注釈付きのコンストラクタはインスタンス化の候補者のデータ収集、最終的なリターン。** 4、2 @Autowiredを正しく初期化するために偽追加され、必ずしもすべての@Autowiredに必要でエラーが出ますcomment'll?** A:注釈付き参考アプローチ:2つの@Autowiredノートを演奏すると、つまり、2は必要な真である、例外がスローされますtrueの場合は1がfalseの2つの層が存在するため、それにもかかわらず、オーダーの、判断を例外がスローされます、 、requiredConstructor判断のコレクションが空である属性のコンストラクタは、2つの決意を直接候補の集合、および以下の決意に、行われず、偽である場合に必要な空の判断のための候補者の集まりであり、 defaultConstructor候補がコレクションに追加され、候補者のコレクションは、3つのコンストラクタは、結果として返されます。** 5、3場合は、コンストラクタに戻り、春には、1つのコンストラクタが行うかを決定するためにどのようにでしょうか?**後3つのコンストラクタスプリングを横断する、スプリング順次パラメータはビーン、コンストラクタを決定するスキップでない場合、すなわち、上記2つの例を言うパラメータビーン(かIOCコンテナ管理)であるか否かを判断しますコンストラクタのパラメータは、このパラメータは、コンストラクタのインスタンス化パラメータを使用して、豆の場合、このパラメータは参照インスタンスコンストラクタを使用せずに、豆でない場合ビーンは、コンストラクタのパラメータを判断しますパラメータではありません。注釈@Autowiredコンストラクタ・インジェクションのために使用された場合にそれが、必要なプロパティがfalseに設定されている、それがインスタンス化引数なしで通常のコンストラクタを使用して、異常豆注入を防ぐことはできません。2つのパラメータはビーン、直接インスタンス化の2つのパラメータを使用して、コンストラクタであり、対応するコンストラクタビーン注入を取得する場合。この最後のノートでは、あなたがコンストラクタ・インジェクション機能を使用する場合、それはコンストラクタに注入することが最善である、上から見ることができますコンストラクタを注入するために、より必要性、必要なすべての属性が存在する場合(@Autowiredコメントをマークされている@Autowired複数のコンストラクタは、唯一のコンストラクタを注入する必要がある場合、)falseに設定されている、このコンストラクタは、必要なプロパティを設定していない、@Autowiredコメントをマークすることができます。あなたはまた、コンストラクタ・インジェクション機能を使用することができますノートを打つが、その数しかできコンストラクタに1、およびコードの貧しい読みやすされない場合は、コードはので、ここで、あなたはコンストラクタ・インジェクション、それを使用します。ここで、知らない人が読んIコンストラクタ・インジェクションアノテーションを使用しての提案は少し良く@Autowiredをマークした場合。

おすすめ

転載: www.cnblogs.com/chen-chen-chen/p/11619737.html