魔法のSpringBoot自動設定

春の自動設定

@SpringBootApplicationコメントから言えば

SpringBootクラスによると、自動的に面倒記述する必要なくし、クラスパスを設定しますxml設定ファイルを。もともとに基づいてxml設定beanするJavaコードのプログラミングモードに基づいて、また異なるものになるシーンの構成に応じて、条件に構成することができます。それは非常にスマートではありません

理解するためにSpringBoot、最も単純なものから、自動設定の原則をSpringBoot起動クラスを開始するには、起動する簡単な例を見て

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }
}

SpringBootアプリケーションはそれは、非常に簡単です開始main方法、そして実行SpringApplicationrunメソッドを。まずrunメソッドが実行されるか気にしません。私たちは見てSpringBootコアノートの適用@SpringBootApplication

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
        @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
    .....
}

注釈付きソースコードをチェックすることは、組み合わせのコメントであることを示しています。

それぞれどのような各アノテーションを見ます

@SpringBootConfiguration

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}

コメントをすることがわかる@Configurationでコメント、ノートのクラスのどのような構成の、SpringBootでは一般的に。

@CompontScanどのようなパッケージには、指定されたコメントをスキャンしたり、スキャンしません。

SpringBootアプリケーションは、魔法の注釈がある自動構成となっています@EnableAutoConfiguraionノートは自動的にSpringBootが自動的SpringBootアプリケーションに@EnableAutoConfiguraionコメントが達成しているため、主に構成し、そのクラスの開始に注釈を結合することができますので、それが開いて自動的に意志、クラスパス依存性に基づいてSpringBoot現在のプロジェクトを許可するように設定することができますコンフィギュレーション。

だから、これはそれを構成するために自動化された注釈を実現する方法です。次は知りたいです。

背後に自動設定メモ

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
    .....
}

注釈は、ノートの組み合わせであり、そこにある@Import(AutoConfigurationImportSelector.class)、そして@Importそれはノート役割は何か、ビュー@Import書かれたソースコードの注釈は、Indicates one or more {@link Configuration @Configuration} classes to import.Provides functionality equivalent to the {@code <import/>} element in Spring XML.、ノートには、この注釈は、インポートする設定クラスを示しており、機能していることを示してSpring XML配置<import>と同じ

ここにいること@Importの一つは、輸入AutoConfigurationImportSelectorとどのような役割を行いますか?概要以下のコメントは、知ることができる@Importインポート可能ImportSelector,ImportBeanDefinitionRegistrar(バージョン4.2)に実装クラスの、ならびに通常のクラスを

Allows for importing {@code @Configuration} classes, {@link ImportSelector} and {@link ImportBeanDefinitionRegistrar} implementations, as well as regular component classes (as of 4.2; analogous to {@link AnnotationConfigApplicationContext#register}).

ここに、コメントに関連するものと@importを言って、春のフレームワーク自体のような、開放されたの名で知られ、注釈が有効で始まる多くの機能を提供し@EnableScheduling@EnableCaching@EnableMBeanExportなど、@EnableAutoConfigurationアイデアやこれらのノートは、実際には同じですA。

@EnableScheduling@ImportSpringフレームワーク豆スケジューリング関連の定義は、IoCコンテナにロードされています。@EnableMBeanExportスルー@ImportIoCコンテナ上のJMX Bean定義にロードされます。

@EnableAutoConfigurationまた手段によって@Import、ヘルプの、自動設定の条件に沿って、すべてのBean定義は、IoCコンテナにロードされます。

そして、はい何EnableAutoConfigurationImportSelectorこの役割に焦点を当てています。メインは春4を使用することです提供SpringFactoriesLoaderのツールを。することによりSpringFactoriesLoader.loadFactoryNames()、以下のクラスパスの読み取りMETA-INF/spring.factoriesファイルを

EnableAutoConfigurationImportSelector読み込むことでspring.factories、キーのorg.springframework.boot.autoconfigure.EnableAutoConfiguration値。ファイルに次のものが含まれます。spring-boot-autoconfigure-1.5.1.RELEASE.jarspring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,\
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\
org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration,\

私たちは新しい定義する場合starterの単語を、だけでなく、その中starterjarパッケージの提供  META-INFO/spring.factoriesファイルを、設定org.springframework.boot.autoconfigure.EnableAutoConfigurationに対応する設定クラスを

以下からのEnableAutoConfigurationコンフィギュレーションクラスを探してCacheAutoConfiguration

@Configuration
@ConditionalOnClass(CacheManager.class)
@ConditionalOnBean(CacheAspectSupport.class)
@ConditionalOnMissingBean(value = CacheManager.class, name = "cacheResolver")
@EnableConfigurationProperties(CacheProperties.class)
@AutoConfigureAfter({ CouchbaseAutoConfiguration.class, HazelcastAutoConfiguration.class,
        HibernateJpaAutoConfiguration.class, RedisAutoConfiguration.class })
@Import(CacheConfigurationImportSelector.class)
public class CacheAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean
    public CacheManagerCustomizers cacheManagerCustomizers(
            ObjectProvider<List<CacheManagerCustomizer<?>>> customizers) {
        return new CacheManagerCustomizers(customizers.getIfAvailable());
    }
    .......
}

これは、@Configuration含まれているコンフィギュレーションクラス@Beanメソッドの戻り値として登録されますbean

このように、私たちは、クラスと条件コンフィギュレーションノートの多くを見ます

Notes構成主な条件は@Conditional、注釈が実現指定されているConditionクラスのを、クラスが実装するmatchsメソッドが戻る場合は、この方法をtrue@Conditional修正クラスやメソッドが作成されますbean容易にするためにSpring4、それは、私たちはいくつかの一般的な条件のコンフィギュレーションノートを達成役立っています

@ConditionalOnBean
@ConditionalOnClass
@ConditionalOnExpression
@ConditionalOnMissingBean
@ConditionalOnMissingClass
@ConditionalOnNotWebApplication

これまでのところ、我々が分析されているSpringBoot自動構成の基本原理を、我々は書きますspring-boot-starter

おすすめ

転載: www.cnblogs.com/watertreestar/p/11780286.html