javascript
SpringBoot @EnableAutoConfiguration注解
前言: Spring Boot中引入了自動(dòng)配置,讓開發(fā)者利用起來更加的簡便、快捷。比如內(nèi)嵌的tomcat端口默認(rèn)配置是8080,這些都屬于Spring Boot自動(dòng)配置的范疇,當(dāng)然其自動(dòng)配置相當(dāng)多,springboot框架的神奇之處在于@EnableAutoConfiguration注釋,此注釋自動(dòng)載入應(yīng)用程序所需的所有Bean——這依賴于Spring Boot在類路徑中的查找
一、 @EnableAutoConfiguration
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import({AutoConfigurationImportSelector.class}) public @interface EnableAutoConfiguration {String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";Class<?>[] exclude() default {};String[] excludeName() default {}; }其中最關(guān)鍵的要屬@Import(AutoConfigurationImportSelector.class),借助AutoConfigurationImportSelector,@EnableAutoConfiguration可以幫助SpringBoot應(yīng)用將所有符合條件的@Configuration配置都加載到當(dāng)前SpringBoot創(chuàng)建并使用的IoC容器。
借助于Spring框架原有的一個(gè)工具類:SpringFactoriesLoader的支持,@EnableAutoConfiguration可以智能的自動(dòng)配置功效才得以大功告成!
在AutoConfigurationImportSelector類中可以看到通過 SpringFactoriesLoader.loadFactoryNames()把 spring-boot-autoconfigure.jar/META-INF/spring.factories中每一個(gè)xxxAutoConfiguration文件都加載到容器中,spring.factories文件里每一個(gè)xxxAutoConfiguration文件一般都會有下面的條件注解:
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.CloudServiceConnectorsAutoConfiguration,\ 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,\ org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.couchbase.CouchbaseReactiveDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.couchbase.CouchbaseReactiveRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.couchbase.CouchbaseRepositoriesAutoConfiguration,\ ....- @ConditionalOnClass : classpath中存在該類時(shí)起效
- @ConditionalOnMissingClass : classpath中不存在該類時(shí)起效
- @ConditionalOnBean : DI容器中存在該類型Bean時(shí)起效
- @ConditionalOnMissingBean : DI容器中不存在該類型Bean時(shí)起效
- @ConditionalOnSingleCandidate : DI容器中該類型Bean只有一個(gè)或@Primary的只有一個(gè)時(shí)起效
- @ConditionalOnExpression : SpEL表達(dá)式結(jié)果為true時(shí)
- @ConditionalOnProperty : 參數(shù)設(shè)置或者值一致時(shí)起效
- @ConditionalOnResource : 指定的文件存在時(shí)起效
- @ConditionalOnJndi : 指定的JNDI存在時(shí)起效
- @ConditionalOnJava : 指定的Java版本存在時(shí)起效
- @ConditionalOnWebApplication : Web應(yīng)用環(huán)境下起效
- @ConditionalOnNotWebApplication : 非Web應(yīng)用環(huán)境下起效
總結(jié)
以上是生活随笔為你收集整理的SpringBoot @EnableAutoConfiguration注解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringCloud教程- 断路器(H
- 下一篇: 自定义SpringBoot Starte