春の自動設定
@SpringBootApplicationコメントから言えば
SpringBoot
クラスによると、自動的に面倒記述する必要なくし、クラスパスを設定しますxml
設定ファイルを。もともとに基づいてxml
設定bean
するJavaコードのプログラミングモードに基づいて、また異なるものになるシーンの構成に応じて、条件に構成することができます。それは非常にスマートではありません
理解するためにSpringBoot
、最も単純なものから、自動設定の原則をSpringBoot
起動クラスを開始するには、起動する簡単な例を見て
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
SpringBoot
アプリケーションはそれは、非常に簡単です開始main
方法、そして実行SpringApplication
runメソッドを。まず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
@Import
Springフレームワーク豆スケジューリング関連の定義は、IoCコンテナにロードされています。@EnableMBeanExport
スルー@Import
IoCコンテナ上の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.jar
spring.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
の単語を、だけでなく、その中starter
のjar
パッケージの提供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