自動アセンブリの原理 @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) が満たされた場合にのみ、自動構成が有効になります。 。