Springboot注解之@EnableAutoConfiguration詳解
一、@EnableAutoConfiguration的作用
簡單點(diǎn)說就是Spring Boot根據(jù)依賴中的jar包,自動(dòng)選擇實(shí)例化某些配置,配置類必須有@Configuration注解。
說白了,還是實(shí)例化對(duì)象,只是實(shí)例化的是依賴包中的類。
另外,我們也可以按照自動(dòng)裝配的規(guī)范自己定義裝配的類。
二、@EnableAutoConfiguration和 @Configuration 的區(qū)別
- @Configuration:表示作用的類是個(gè)配置類。我們平時(shí)也會(huì)寫配置類,比如我們系統(tǒng)中的DataSourceConfig類,但是由于這個(gè)類是在Starter對(duì)應(yīng)的子目錄下,會(huì)自動(dòng)加載,所以@EnableAutoConfiguration就作用不到了。
- @EnableAutoConfiguration:是一個(gè)加載Starter目錄包之外的需要Spring自動(dòng)生成bean對(duì)象(是否需要的依據(jù)是"META-INF/spring.factories"中org.springframework.boot.autoconfigure.EnableAutoConfiguration后面是有能找到那個(gè)bean)的帶有@Configuration注解的類。一般就是對(duì)各種引入的spring-boot-starter依賴包指定的(spring.factories)類進(jìn)行實(shí)例化。
整體流程
1、我們啟動(dòng)類中會(huì)加上@SpringBootApplication
2、@SpringBootApplication包含了@EnableAutoConfiguration,告知應(yīng)用啟動(dòng)的時(shí)候需要掃描依賴包中需要實(shí)例化的類
3、Springboot啟動(dòng)的時(shí)候會(huì)去掃描META-INF/spring.factories,查看具體是哪些類需要實(shí)例化
4、掃描哪些需要實(shí)例化的類,看下是否有@Configuration注解,如果有,則實(shí)例化
5、實(shí)例化的時(shí)候可能需要一些配置屬性,一般這些類都會(huì)加上@EnableConfigurationProperties(RocketMQProperties.class)
6、RocketMQProperties會(huì)將屬性映射為bean類
三、@EnableAutoConfiguration案例
1、Kafka自動(dòng)裝配
我們會(huì)發(fā)現(xiàn),當(dāng)我們?cè)赼pplication.properties中配置spring.kafka.xxx,就可以在程序中直接使用了,說明Kafka已經(jīng)被實(shí)例化了
問題來了,是什么時(shí)候?qū)嵗模?/p>
其實(shí)就是@EnableAutoConfiguration注解自動(dòng)實(shí)例化的。
實(shí)現(xiàn)類:KafkaAutoConfiguration
代碼簡單解讀如下:
2、JMX自動(dòng)裝配
當(dāng)我們引入Spring Boot Actuator相關(guān)包之后就能自動(dòng)采集到Spring boot應(yīng)用的相關(guān)運(yùn)行指標(biāo)了,怎么做到的?
其實(shí)這些指標(biāo)都是通過JMX標(biāo)準(zhǔn)采集的,而Spring boot的自動(dòng)裝配也包含了JMX,即SpringApplicationAdminJmxAutoConfiguration。
四、spring-boot-starter與@EnableAutoConfiguration的關(guān)系
spring-boot-starter:自動(dòng)導(dǎo)入組件對(duì)應(yīng)的maven包,目的主要是簡單開發(fā)人員手動(dòng)去配置maven各種依賴包,不僅麻煩,碰到版本匹配問題還很容易出錯(cuò)。
@EnableAutoConfiguration:需要依賴已經(jīng)加載好的包進(jìn)行bean實(shí)例化。
但不一定需要依賴spring-boot-starter,自動(dòng)手動(dòng)把包加載也可以
五、關(guān)于實(shí)例化
在Jfinal中我們需要通過Plugin的規(guī)范去生成對(duì)象到上下文中。
而在Spring boot中,我們可以通過@Configuration以及@Service,@Component等注解生成對(duì)象到IOC容器中。
未必所有實(shí)例化都是通過@EnableAutoConfiguration,@Configuration以及@Service,@Component等注解,也可以通過其他方式(說白了怎么加載類的問題,因?yàn)閷?shí)例化最終就是找到類,然后通過反射生成對(duì)象而已)。
其他實(shí)例化方式其實(shí)可以從META-INF/spring.factories中看出來,里面不僅有org.springframework.boot.autoconfigure.EnableAutoConfiguration,
還有
- org.springframework.context.ApplicationContextInitializer(初始化的時(shí)候?qū)嵗?/li>
- org.springframework.context.ApplicationListener(初始化監(jiān)聽的時(shí)候?qū)嵗?/li>
- org.springframework.boot.diagnostics.FailureAnalyzer(應(yīng)用啟動(dòng)失敗分析類)
等等。
但是對(duì)于這些實(shí)例化方式有個(gè)共同點(diǎn),都需要在META-INF/spring.factories中配置。
六、默認(rèn)自動(dòng)裝配的類
# Auto Configure 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.CassandraRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.couchbase.CouchbaseRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration,\ org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.ldap.LdapDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.ldap.LdapRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.neo4j.Neo4jRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.solr.SolrRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration,\ org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\ org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration,\ org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration,\ org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration,\ org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration,\ org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration,\ org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\ org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration,\ org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration,\ org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,\ org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,\ org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\ org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration,\ org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\ org.springframework.boot.autoconfigure.jms.JndiConnectionFactoryAutoConfiguration,\ org.springframework.boot.autoconfigure.jms.activemq.ActiveMQAutoConfiguration,\ org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration,\ org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration,\ org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration,\ org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration,\ org.springframework.boot.autoconfigure.jooq.JooqAutoConfiguration,\ org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration,\ org.springframework.boot.autoconfigure.ldap.embedded.EmbeddedLdapAutoConfiguration,\ org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration,\ org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration,\ org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration,\ org.springframework.boot.autoconfigure.mail.MailSenderValidatorAutoConfiguration,\ org.springframework.boot.autoconfigure.mobile.DeviceResolverAutoConfiguration,\ org.springframework.boot.autoconfigure.mobile.DeviceDelegatingViewResolverAutoConfiguration,\ org.springframework.boot.autoconfigure.mobile.SitePreferenceAutoConfiguration,\ org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoAutoConfiguration,\ org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\ org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration,\ org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\ org.springframework.boot.autoconfigure.reactor.ReactorAutoConfiguration,\ org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration,\ org.springframework.boot.autoconfigure.security.SecurityFilterAutoConfiguration,\ org.springframework.boot.autoconfigure.security.FallbackWebSecurityAutoConfiguration,\ org.springframework.boot.autoconfigure.security.oauth2.OAuth2AutoConfiguration,\ org.springframework.boot.autoconfigure.sendgrid.SendGridAutoConfiguration,\ org.springframework.boot.autoconfigure.session.SessionAutoConfiguration,\ org.springframework.boot.autoconfigure.social.SocialWebAutoConfiguration,\ org.springframework.boot.autoconfigure.social.FacebookAutoConfiguration,\ org.springframework.boot.autoconfigure.social.LinkedInAutoConfiguration,\ org.springframework.boot.autoconfigure.social.TwitterAutoConfiguration,\ org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration,\ org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,\ org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration,\ org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration,\ org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration,\ org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration,\ org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration,\ org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration,\ org.springframework.boot.autoconfigure.web.HttpEncodingAutoConfiguration,\ org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration,\ org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration,\ org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration,\ org.springframework.boot.autoconfigure.web.WebClientAutoConfiguration,\ org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration,\ org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration,\ org.springframework.boot.autoconfigure.websocket.WebSocketMessagingAutoConfiguration,\ org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration
到此這篇關(guān)于Springboot注解之@EnableAutoConfiguration詳解的文章就介紹到這了,更多相關(guān)@EnableAutoConfiguration注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot自動(dòng)配置@EnableAutoConfiguration過程示例
- SpringBoot中的@EnableAutoConfiguration注解解析
- SpringBoot中@EnableAutoConfiguration和@Configuration的區(qū)別
- SpringBoot中@EnableAutoConfiguration注解源碼分析
- SpringBoot使用@EnableAutoConfiguration實(shí)現(xiàn)自動(dòng)配置詳解
- 解析SpringBoot @EnableAutoConfiguration的使用
- SpringBoot中@EnableAutoConfiguration注解的實(shí)現(xiàn)
相關(guān)文章
JavaFX Application應(yīng)用實(shí)例
下面小編就為大家?guī)硪黄狫avaFX Application應(yīng)用實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-10-10SpringBoot 創(chuàng)建對(duì)象常見的幾種方式小結(jié)
Spring Boot中創(chuàng)建對(duì)象的幾種常見方式包括使用@Component、@Service、@Repository或@Controller注解,本文就來詳細(xì)的介紹一下,感興趣的可以了解一下2024-11-11SpringBoot創(chuàng)建監(jiān)聽器的方法示例
在Java中,監(jiān)聽器(Listener)是一種設(shè)計(jì)模式,它允許對(duì)象在 特定事件 發(fā)生時(shí) 自動(dòng)執(zhí)行某些操作,這種設(shè)計(jì)模式通常用于實(shí)現(xiàn) 發(fā)布-訂閱模型,本文給大家介紹了SpringBoot創(chuàng)建監(jiān)聽器的方法示例,感興趣的通過可以參考一下2024-04-04mybatis整合spring實(shí)現(xiàn)開啟mapper.xml映射文件掃描
這篇文章主要介紹了mybatis整合spring實(shí)現(xiàn)開啟mapper.xml映射文件掃描,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10springboot循環(huán)依賴問題案例代碼及解決辦法
在 Spring Boot 中,如果兩個(gè)或多個(gè) Bean之間存在循環(huán)依賴(即 Bean A 依賴 Bean B,而 Bean B 又依賴 Bean A),會(huì)導(dǎo)致 Spring 的依賴注入機(jī)制無法正確處理,從而拋出異常,下面給大家介紹springboot循環(huán)依賴問題及其解決辦法,感興趣的朋友一起看看吧2025-04-04springboot項(xiàng)目獲取請(qǐng)求頭當(dāng)中的token的方法
本文主要介紹了springboot項(xiàng)目獲取請(qǐng)求頭當(dāng)中的token的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11