@EnableAutoConfigurationの原理を機能springboot

通常、我々は@SpringBootApplicatoin springboot注釈の起動方法を向上させるプロジェクトを開始、ノートが@EnableAutoConfigurationに含ま

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented 
@Inherited 
@SpringBootConfiguration @EnableAutoConfiguration 
@ComponentScan(excludeFilters
 = { 
        @Filter(タイプ = FilterType.CUSTOM、クラス= TypeExcludeFilter。クラス)、
        @Filter(タイプ =のfilterType .CUSTOM、クラス= AutoConfigurationExcludeFilter。クラス)})
 公共の @のインタフェースSpringBootApplication { 

    / ** 
     *彼らは適用されませんように、特定の自動構成のクラスを除外します。
     * @return 除外するためのクラス
     * / 
    @AliasFor(注釈 = EnableAutoConfiguration クラス
    クラス <?> []除外()デフォルト{}。

    / ** 
     *彼らがするんように具体的な自動構成クラス名除外する
     *適用されませんが。
     * @return 除外するクラス名
     * @since 1.3.0
      * / 
    @AliasFor(注釈 = EnableAutoConfiguration。クラス
    文字列[] excludeName()デフォルト{}を。

    / ** 
     *基本パッケージは、注釈付きのコンポーネントをスキャンします。{使用@link #scanBasePackageClassesを}
     *文字列ベースのパッケージ名にタイプセーフな代替のため。
     * @return スキャンするベースパッケージ
     * @since 1.3.0
      * / 
    @AliasFor(注釈 = ComponentScan クラス、属性= "basePackages" 
    文字列[] scanBasePackages()デフォルト{}を。

    / ** 
     * {にタイプセーフ代替@link するパッケージを指定するため#scanBasePackages} 
     *注釈付きコンポーネントをスキャン。指定された各クラスのパッケージがスキャンされます。
     * <P> 
     *各パッケージに特別なノーオペレーションマーカークラスまたはインタフェースを作成することを検討しています 
     *この属性によって参照されている以外の目的を達成しません。
     * @returnスキャンするベースパッケージ
     * @since 1.3.0
      * / 
    @AliasFor(注釈 = ComponentScan クラス、属性= "basePackageClasses" 
    クラス <?> [] scanBasePackageClasses()デフォルト{}を。

}

 

だから、@EnableAutoConfigurationそれは自動的にどのように動作しますか。さんは@EnableAutoConfigurationの定義を見てみましょう

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented 
@Inherited 
@AutoConfigurationPackage @import(AutoConfigurationImportSelector 
クラスパブリック @のインタフェースEnableAutoConfiguration { 

    文字列ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration" 

    / ** 
     *彼らは適用されませんように、特定の自動構成のクラスを除外します。
     * @return 除外するクラスを
      * / 
    クラス <?>)([]除外デフォルト} {。

    / **
     *彼らがするんように具体的な自動構成クラス名除外する
     *適用されませんが。
     * @return 除外するクラス名
     * @since 1.3.0
      * / 
    文字列[] excludeName()デフォルト{}を。

}

私たちは、表記EnableAutoConfigurationの定義を見て:

自動有効推測し、しようとすると、Springアプリケーションコンテキストの設定を
 *あなたが必要とする可能性がある豆を設定します。自動設定クラスは通常、
 *あなたのクラスパスとどのような豆あなたが定義されているに基づいて適用されます。

おそらくそれは意味:設定したいBeanコンテナを推測しようとした後、自動的にロードされました。

@EnableAutoConfigurationが内側に参照することを見つけることは非常に満足して@import(AutoConfigurationImportSelector。クラス)を、直感は次のようになり、我々はこれらの自動設定(データソース、インターセプタ)クラスを導入しましたAutoConfigurationImportSelector。

AutoConfigurationImportSelectorの定義を見てみましょう:

パブリック クラスAutoConfigurationImportSelectorは
 実装DeferredImportSelector、BeanClassLoaderAware、ResourceLoaderAware、
順序BeanFactoryAware、EnvironmentAwareを、

元AutoConfigurationImportSelectorクラスが実装ORGをSpringframeworkコンテキスト注釈 .DeferredImportSelector

豆の解析中にそのクラスのパブリック文字列[] selectImports(AnnotationMetadata annotationMetadata)、スプリングを実現した後、それは自動的にメソッドがクラスをロードするため名selectImportsのリストを返すである、クラスのロードを展開するために、このメソッドを呼び出します。

そこからselectImportsを考えるのは簡単ですが、それらのデータソースAutoEnableConfiguration、インターセプタクラスの設定を返します。

そして、特定のselectImportsの実装を見てみましょう。

 

おすすめ

転載: www.cnblogs.com/swave/p/10966697.html