SpringBootソースコード解析の自動アセンブリ原理

最初に入力してください

@SpringBootApplication注解内里面有自动装配的注解在自定装配里面里面它导入了自动装配选择器

(リフレクションで得られたセレクターを自動で配線するクラス)。次に、自動アセンブリセレクターに移動します

中に1つあります

getCandidateConfigurations方法。通过这个方法获取一个
SpringFactoriesLoader的集合(通过该方法的类名反射获取)

を取得してロードします。

"META-INF/spring.factories"下的

リソースディレクトリ

読み取られたリソースはパススルーされます

loadSpringFactories的方法

一つ一つカプセル化されており、

Properties中最后返回
Properties供人们使用最终指向"META-INF/spring.factories"文件

構成ファイルと spring.factory の間の接続は、configrationproperties アノテーションを通じてこれらのクラスをロードおよびバインドするために spring.factory (クラス内の構成ファイルである http/mvc/.. など) でバインドする必要があるさまざまなプロパティにあります。

Spring の基礎となるアノテーション: さまざまな条件に基づいて、現在の構成またはクラスが有効かどうかを判断します。

同時に、構成ファイルでこれらを構成するための特定の固有のルールが存在します。

xxxAutoConfiguration にはデフォルト値があり、xxxproperties は構成ファイルにバインドされているため、カスタマイズされた構成を使用できます

一文の要約: この構成クラスが有効になるかどうかは、さまざまな現在の条件に基づいて決定してください。

  • この構成クラスが有効になると、この構成クラスはさまざまなコンポーネントをコンテナーに追加します。

  • これらのコンポーネントのプロパティは、対応するプロパティ クラスから取得され、これらのクラスの各プロパティは構成ファイルにバインドされます。

  • 構成ファイルで構成できるすべてのプロパティは、xxxxProperties クラスにカプセル化されます。

  • 設定ファイルに何を設定できるかは、ある機能に対応する属性クラスを参照することで決まります。

  • エッセンス

    1. SpringBoot の起動により、多数の自動構成クラスがロードされます。

    2. SpringBoot によって作成された自動構成クラスに、必要な関数がデフォルトで含まれているかどうかを確認してみましょう。

    3. この自動構成クラスでどのコンポーネントが構成されているかを見てみましょう (使用したいコンポーネントがその中に存在する限り、手動で構成する必要はありません)。

    4. コンテナ内の自動構成クラスにコンポーネントを追加すると、プロパティ クラスから特定のプロパティが取得されます。構成ファイルでこれらのプロパティの値を指定するだけで済みます。

    xxxxAutoConfiguration: 自動構成クラス;コンポーネントをコンテナーに追加します

    xxxxProperties: 関連するプロパティを構成ファイルにカプセル化します。

  • インタビュアーが尋ねたら、 springboot は main メソッドの下の SpringApplication.run メソッドを通じて起動され、起動すると refshContext メソッドを呼び出し、最初にコンテナを更新し、次に次の形式に従って Bean を登録します。注釈の解析または構成ファイルの解析。そして、スタートアップ クラスの SpringBootApplication アノテーションを通じて解析が開始されます。EnableAutoConfiguration に従って自動構成が開始され、選択的にインポートするためのコア メソッド ImportSelect があります。EnableAutoConfiguration の先頭にあるキーは、すべてを読み込みます対応する自動化設定が含まれています。120 を超える自動化設定をすべてインポートするわけではありません。各自動化設定には条件判定のアノテーションがあります。まず、相互の jar パッケージをインポートするかどうかを判断し、次にコンテナに Bean があるかどうかを判断します。それを豆の容器に注入します。

おすすめ

転載: blog.csdn.net/qq_52915133/article/details/119174413