javascript
SpringBoot @EnableAutoConfiguration注解
前言: Spring Boot中引入了自動配置,讓開發者利用起來更加的簡便、快捷。比如內嵌的tomcat端口默認配置是8080,這些都屬于Spring Boot自動配置的范疇,當然其自動配置相當多,springboot框架的神奇之處在于@EnableAutoConfiguration注釋,此注釋自動載入應用程序所需的所有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 {}; }其中最關鍵的要屬@Import(AutoConfigurationImportSelector.class),借助AutoConfigurationImportSelector,@EnableAutoConfiguration可以幫助SpringBoot應用將所有符合條件的@Configuration配置都加載到當前SpringBoot創建并使用的IoC容器。
借助于Spring框架原有的一個工具類:SpringFactoriesLoader的支持,@EnableAutoConfiguration可以智能的自動配置功效才得以大功告成!
在AutoConfigurationImportSelector類中可以看到通過 SpringFactoriesLoader.loadFactoryNames()把 spring-boot-autoconfigure.jar/META-INF/spring.factories中每一個xxxAutoConfiguration文件都加載到容器中,spring.factories文件里每一個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中存在該類時起效
- @ConditionalOnMissingClass : classpath中不存在該類時起效
- @ConditionalOnBean : DI容器中存在該類型Bean時起效
- @ConditionalOnMissingBean : DI容器中不存在該類型Bean時起效
- @ConditionalOnSingleCandidate : DI容器中該類型Bean只有一個或@Primary的只有一個時起效
- @ConditionalOnExpression : SpEL表達式結果為true時
- @ConditionalOnProperty : 參數設置或者值一致時起效
- @ConditionalOnResource : 指定的文件存在時起效
- @ConditionalOnJndi : 指定的JNDI存在時起效
- @ConditionalOnJava : 指定的Java版本存在時起效
- @ConditionalOnWebApplication : Web應用環境下起效
- @ConditionalOnNotWebApplication : 非Web應用環境下起效
總結
以上是生活随笔為你收集整理的SpringBoot @EnableAutoConfiguration注解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringCloud教程- 断路器(H
- 下一篇: Druid 连接池的实用 配置详解