SpringBoot中@EnableAutoConfiguration注解的實(shí)現(xiàn)
介紹
Spring Boot 是一個(gè)用于開(kāi)發(fā) Spring 應(yīng)用程序的強(qiáng)大框架,帶有大量注解來(lái)簡(jiǎn)化整個(gè)開(kāi)發(fā)過(guò)程。其中一個(gè)值得注意的注解是@EnableAutoConfiguration。今天,我們將深入探討這個(gè)注解的奇妙之處,了解它的工作原理,并學(xué)習(xí)如何在我們的 Spring Boot 應(yīng)用程序中有效地使用它。
Spring Boot自動(dòng)配置簡(jiǎn)介
在深入研究 Spring Boot @EnableAutoConfiguration之前,有必要了解 Spring Boot 的自動(dòng)配置。
自動(dòng)配置是一項(xiàng)強(qiáng)大、靈活的功能,旨在最大限度地減少啟動(dòng)和運(yùn)行 Spring 應(yīng)用程序所需的樣板配置。Spring Boot 自動(dòng)配置會(huì)根據(jù)您在項(xiàng)目中添加的 jar 依賴項(xiàng)自動(dòng)配置您的 Spring 應(yīng)用程序。
@EnableAutoConfiguration
簡(jiǎn)而言之,此注解向 Spring Boot 發(fā)出信號(hào),開(kāi)始根據(jù)類路徑設(shè)置、其他 Bean 和各種屬性設(shè)置添加 Bean。當(dāng)您使用此注解時(shí),Spring Boot 會(huì)嘗試自動(dòng)配置您可能需要的 bean。
通常,您會(huì)在主 Spring Boot 應(yīng)用程序類中找到此注解。
導(dǎo)入org.springframework.boot.SpringApplication;
導(dǎo)入org.springframework.boot.autoconfigure.EnableAutoConfiguration;
導(dǎo)入org.springframework.context.annotation.ComponentScan;
@EnableAutoConfiguration @ComponentScan(basePackages = "com.example.myapp") public class MyApp { public static void main (String[] args) { SpringApplication.run(MyApp.class, args); } } }
在上面的示例中,@EnableAutoConfiguration放置在MyApp類之前,這是我們 Spring Boot 應(yīng)用程序的入口點(diǎn)。
@EnableAutoConfiguration 的工作原理
底層機(jī)制就是,@EnableAutoConfiguration利用 Spring Factories Loader 機(jī)制來(lái)定位和加載配置。
Spring Boot 檢查文件的類路徑META-INF/spring.factories。在這個(gè)文件中,它查找鍵
org.springframework.boot.autoconfigure.EnableAutoConfiguration并獲取該鍵下所有類的列表。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\ org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\ ...
這些類是 Spring Boot 應(yīng)用于其 ApplicationContext 的配置。需要注意的是,這些配置并不是盲目應(yīng)用的。每個(gè)自動(dòng)配置類都配備了決定是否應(yīng)應(yīng)用它的條件。
這些條件通常用@ConditionalOnClass、@ConditionalOnBean、@ConditionalOnMissingBean、@ConditionalOnProperty等注解聲明。這些條件共同定義是否將根據(jù)特定類、bean 或?qū)傩缘拇嬖诨虿淮嬖趤?lái)應(yīng)用某種配置。
自定義自動(dòng)配置
盡管自動(dòng)配置的目標(biāo)是盡可能智能,但可能需要調(diào)整其行為以滿足您的應(yīng)用程序的需求。
排除自動(dòng)配置類
自定義自動(dòng)配置過(guò)程的方法之一是排除您不希望應(yīng)用的特定自動(dòng)配置類。您可以使用exclude以下屬性來(lái)做到這一點(diǎn)@EnableAutoConfiguration:
導(dǎo)入org.springframework.boot.SpringApplication;
導(dǎo)入org.springframework.boot.autoconfigure.EnableAutoConfiguration;
導(dǎo)入org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
導(dǎo)入org.springframework.context.annotation.ComponentScan;
@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class) @ComponentScan(basePackages = "com.example.myapp") public class MyApp { public static void main (String[] args) { SpringApplication.run(MyApp.class, args); } } }
在此示例中,DataSourceAutoConfiguration即使?jié)M足所有其他條件,也不會(huì)應(yīng)用。
覆蓋自動(dòng)配置
另一種自定義方法是聲明你自己的 bean,會(huì)覆蓋自動(dòng)配置中定義的 bean。
例如,如果定義了DataSourcebean,它將覆蓋自動(dòng)配置的 bean。
導(dǎo)入org.springframework.context.annotation.Bean;
導(dǎo)入org.springframework.context.annotation.Configuration;
@Configuration public class MyConfiguration { @Bean public DataSource dataSource () { // 返回您的自定義數(shù)據(jù)源 } }
結(jié)論
Spring Boot@EnableAutoConfiguration是一個(gè)強(qiáng)大的工具,可以簡(jiǎn)化配置過(guò)程,從而實(shí)現(xiàn)快速開(kāi)發(fā)。此注解會(huì)根據(jù)項(xiàng)目的依賴項(xiàng)智能地自動(dòng)配置您的 Spring 應(yīng)用程序。然而,了解其內(nèi)部工作原理和定制選項(xiàng)以最大限度地發(fā)揮其潛力至關(guān)重要。盡管自動(dòng)配置是一項(xiàng)令人印象深刻的功能,但其功效取決于其使用的效率。因此,擁抱它,探索它,并觀察它簡(jiǎn)化您的 Spring Boot 開(kāi)發(fā)之旅。
到此這篇關(guān)于SpringBoot中@EnableAutoConfiguration注解的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot @EnableAutoConfiguration注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot自動(dòng)配置@EnableAutoConfiguration過(guò)程示例
- SpringBoot中的@EnableAutoConfiguration注解解析
- Springboot注解之@EnableAutoConfiguration詳解
- SpringBoot中@EnableAutoConfiguration和@Configuration的區(qū)別
- SpringBoot中@EnableAutoConfiguration注解源碼分析
- SpringBoot使用@EnableAutoConfiguration實(shí)現(xiàn)自動(dòng)配置詳解
- 解析SpringBoot @EnableAutoConfiguration的使用
相關(guān)文章
Springboot 項(xiàng)目讀取Resources目錄下的文件(推薦)
這篇文章主要介紹了Springboot 項(xiàng)目讀取Resources目錄下的文件,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11SparkStreaming整合Kafka過(guò)程詳解
這篇文章主要介紹了SparkStreaming整合Kafka過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-01-01springboot配置文件中使用${}注入值的兩種方式小結(jié)
這篇文章主要介紹了springboot配置文件中使用${}注入值的兩種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03透徹理解Java中Synchronized(對(duì)象鎖)和Static Synchronized(類鎖)的區(qū)別
這篇文章主要介紹了Java中Synchronized(對(duì)象鎖)和Static Synchronized(類鎖)的區(qū)別,希望對(duì)大家有所幫助,一起跟隨小編過(guò)來(lái)看看吧2018-05-05Spring中實(shí)現(xiàn)的三種異步流式接口方法
在現(xiàn)代Web開(kāi)發(fā)中,接口超時(shí)是一個(gè)常見(jiàn)的問(wèn)題,尤其是在處理耗時(shí)操作時(shí),傳統(tǒng)的同步接口在處理長(zhǎng)時(shí)間任務(wù)時(shí)會(huì)阻塞請(qǐng)求線程,從而影響系統(tǒng)的響應(yīng)能力,本文將詳細(xì)講解Spring中實(shí)現(xiàn)的三種異步流式接口方法,需要的朋友可以參考下2024-10-10MybatisPlus使用Wrapper實(shí)現(xiàn)條件查詢功能
這篇文章主要介紹了MybatisPlus使用Wrapper實(shí)現(xiàn)查詢功能,使用它可以實(shí)現(xiàn)很多復(fù)雜的查詢,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06springboot中@RestController注解實(shí)現(xiàn)
在JavaWeb開(kāi)發(fā)中,Spring框架及其組件SpringMVC因高效和強(qiáng)大功能而廣受歡迎,@RestController注解是SpringMVC中的重要組成部分,下面就來(lái)介紹一下,感興趣的可以了解一下2024-09-09