学習ブログ: [SpringBoot] @SpringBootApplication 自動アセンブリ原理

自動アセンブリの原理 @SpringBootApplication

pom.xml

  • spring-boot-dependency コア依存関係 (親プロジェクト)
  • SpringBoot の依存関係を導入するときにバージョン (ウェアハウス) を指定する必要はありません

ランチャー

<!--启动器-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>

springboot のすべての機能シナリオ ==> 対応するランチャー

メインプログラム

@SpringBootApplication  //标注 springboot应用   启动类下的所有资源被导入
public class Springboot01HelloworldApplication {
    
    

    public static void main(String[] args) {
    
    
        //通过反射加载该类的对象
        SpringApplication.run(Springboot01HelloworldApplication.class, args);
    }
}

ここに画像の説明を挿入

クリックして 2 つの主要な注釈を確認してください

@SpringBootConfiguration スプリングブート構成アノテーション
@EnableAutoConfiguration 自動構成アノテーション

ここに画像の説明を挿入


@SpringBootConfiguration スプリングブート構成アノテーションを最初に見てみましょう

クリックして @Configuration を見つけます。これは構成クラスです。

ここに画像の説明を挿入

次に @Component をクリックします。これは実際には Spring コンポーネントです。

ここに画像の説明を挿入


@EnableAutoConfiguration 自動構成アノテーションを見てください。

ここに画像の説明を挿入

自動構成パッケージのアノテーション @AutoConfigurationPackage を検出します。

自動構成セレクター @Import({AutoConfigurationImportSelector.class})

自動構成パッケージの注釈 @AutoConfigurationPackage をクリックし、レジストラー @Import({Registrar.class}) がインポートされたことを確認します。

ここに画像の説明を挿入

次に、自動構成セレクター @Import({AutoConfigurationImportSelector.class}) をクリックします。これがコアです

環境、クラスローダー、リソースローダーなどを定義します。
ここに画像の説明を挿入

焦点は (コンフィギュレータ エンティティの自動ロード) getAutoConfigurationEntry() メソッドにあります。

ここに画像の説明を挿入

getCandidateConfigurations() メソッドを発見(候補構成を取得)し、追跡します。

ここに画像の説明を挿入

このメソッドは、ロードされたすべての構成メソッド SpringFactoriesLoader.loadFactoryNames() を取得し、2 つのメソッドをロードします (スプリング ファクトリ ロード ファクトリ クラスの取得) getSpringFactoriesLoaderFactoryClass() メソッドに注目すると、自動構成アノテーション @EnableAutoConfiguration のクラスを取得していることがわかります。

protected Class<?> getSpringFactoriesLoaderFactoryClass() {
    
    
   return EnableAutoConfiguration.class;
}

そして springboot のメインスタートアップクラス @SpringBootApplication

自動構成アノテーション @EnableAutoConfiguration を継承しました

ここに画像の説明を挿入

このような大きな円を一巡した後、実行することは 1 つあり、それはスタートアップ クラスの下にあるすべてのリソースをインポートすることです。

ここに画像の説明を挿入

設定が空でない場合は、(自動設定されたコア ファイル) META-INF/spring.factories に移動して設定ファイルを見つけます。

ここに画像の説明を挿入

ただし、バージョン 2.7 の springboot 自動構成ファイルは、

META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

ここに画像の説明を挿入

ただし、 spring.factories はまだ使用できますが、将来廃止される可能性があります

次に、設定ファイルを SpringFactoriesLoader.loadFactoryNames にロードする方法を見てみましょう。

ここに画像の説明を挿入

この方法では、コア構成ファイル META-INF/spring.factories またはシステム ファイルから構成ファイル内のすべての構成をループで取得し、それらをトラバースして、使用するプロパティにカプセル化します。

注: springboot のすべての自動構成は起動時にスキャンおよびロードされ、spring.factories のすべての自動構成クラスがその中に含まれます。対応するスターターがインポートされ、条件 (@ConditionalOnXXX) が満たされた場合にのみ、自動構成が有効になります。 。

おすすめ

転載: blog.csdn.net/Aurinko324/article/details/125353992