Java SpringBoot自動裝配原理詳解及源碼注釋
一、pom.xml文件
1.父依賴
主要是依賴一個父項(xiàng)目,管理項(xiàng)目的資源過濾以及插件!
資源過濾已經(jīng)配置好了,無需再自己配置
在pom.xml中有個父依賴:spring-boot-dependencies是SpringBoot的版本控制中心!
因?yàn)橛羞@些版本倉庫,我們在寫或者引入一些springboot依賴的時候,不需要指定版本!
2.啟動器:
啟動器也就是Springboot的啟動場景;
比如spring-boot-starter-web,它就會幫我們自動導(dǎo)入web環(huán)境所有的依賴!
springboot會將所有的功能場景,都變成一個個的starter(啟動器)我們需要使用什么功能,只需找到相對應(yīng)的啟動器即可!
二、主程序:
剖析源碼注解:
@SpringBootConfiguration: springboot的配置 @configuration:spring配置類 @Component: 說明這也是一個spring組件 @EnableAutoConfiguration:自動配置 @AutoConfigurationPackage:自動配置包 @Import(AutoConfigurationPackages.Registrar.class):自動配置'包注冊' @Import(AutoConfigurationImportSelector.class):自動配置導(dǎo)入選擇 //獲取所有的配置 List<String> configurations = getCandidateConfigurations(annotationMetadata,attributes);
獲取候選的配置
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) { List<String> configurations = SpringFactoriesLoader.loadFactoryNames( getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader()); Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you " + "are using a custom packaging, make sure that file is correct."); return configurations; }
META-INF/spring.factories:自動配置的核心文件
自動配置
Properties properties = PropertiesLoaderUtils.loadProperties(resource); 所有資源加載到配置類中!
所以,springboot所有自動配置都是在啟動的時候掃描并加載 spring.factories所有的自動配置類都在這里面,但是不一定生效,要判斷條件是否成立,只要導(dǎo)入對應(yīng)的start,就有對應(yīng)的啟動器了,有了啟動器,我們自動裝配就會生效,然后就配置成功!
三、結(jié)論:
1. springboot在啟動的時候,從類路徑下/META-INF/ spring.factories獲取指定的值!
2.將這些自動配置的類導(dǎo)入容器,自動配置就會生效,幫我進(jìn)行自動配置!
3.以前我們需要手動配置的東西,現(xiàn)在springboot幫我們做了!
4.整合javaEE,解決方案和自動配置的東西都在spring-boot-autoconfigure-2.1.4.RELEASE.jar這個包下!
5.它會把所有需要導(dǎo)入的組件,以類名的方式返回,這些組件就會被添加到容器!
6.容器中也會存在非常多的xxxAutoConfiguration的文件(@Bean),就是這些類給容器中導(dǎo)入了這個場景需要的所有組件!
到此這篇關(guān)于Java SpringBoot自動裝配原理詳解及源碼注釋的文章就介紹到這了,更多相關(guān)Java SpringBoot 自動裝配內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java自定義任務(wù)類定時執(zhí)行任務(wù)示例 callable和future接口使用方法
Callable是類似于Runnable的接口,實(shí)現(xiàn)Callable接口的類和實(shí)現(xiàn)Runnable的類都是可被其它線程執(zhí)行的任務(wù)2014-01-01使用HandlerMethodArgumentResolver用于統(tǒng)一獲取當(dāng)前登錄用戶
這篇文章主要介紹了使用HandlerMethodArgumentResolver用于統(tǒng)一獲取當(dāng)前登錄用戶實(shí)例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12Mybatis詳解動態(tài)SQL以及單表多表查詢的應(yīng)用
MyBatis的動態(tài)SQL是基于OGNL表達(dá)式的,它可以幫助我們方便的在SQL語句中實(shí)現(xiàn)某些邏輯,下面這篇文章主要給大家介紹了關(guān)于Mybatis超級強(qiáng)大的動態(tài)SQL語句的相關(guān)資料,需要的朋友可以參考下2022-06-06Spring Web MVC框架學(xué)習(xí)之配置Spring Web MVC
這一篇文章講的是Spring Web MVC各部分的配置方法,包括Java代碼配置和XML文件配置以及MVC命名空間的使用方法。2017-03-03