Java SpringBoot自動(dòng)裝配原理詳解及源碼注釋
一、pom.xml文件
1.父依賴
主要是依賴一個(gè)父項(xiàng)目,管理項(xiàng)目的資源過(guò)濾以及插件!
資源過(guò)濾已經(jīng)配置好了,無(wú)需再自己配置
在pom.xml中有個(gè)父依賴:spring-boot-dependencies是SpringBoot的版本控制中心!
因?yàn)橛羞@些版本倉(cāng)庫(kù),我們?cè)趯懟蛘咭胍恍﹕pringboot依賴的時(shí)候,不需要指定版本!
2.啟動(dòng)器:
啟動(dòng)器也就是Springboot的啟動(dòng)場(chǎng)景;
比如spring-boot-starter-web,它就會(huì)幫我們自動(dòng)導(dǎo)入web環(huán)境所有的依賴!
springboot會(huì)將所有的功能場(chǎng)景,都變成一個(gè)個(gè)的starter(啟動(dòng)器)我們需要使用什么功能,只需找到相對(duì)應(yīng)的啟動(dòng)器即可!
二、主程序:
剖析源碼注解:
@SpringBootConfiguration: springboot的配置 @configuration:spring配置類 @Component: 說(shuō)明這也是一個(gè)spring組件 @EnableAutoConfiguration:自動(dòng)配置 @AutoConfigurationPackage:自動(dòng)配置包 @Import(AutoConfigurationPackages.Registrar.class):自動(dòng)配置'包注冊(cè)' @Import(AutoConfigurationImportSelector.class):自動(dòng)配置導(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:自動(dòng)配置的核心文件
自動(dòng)配置
Properties properties = PropertiesLoaderUtils.loadProperties(resource); 所有資源加載到配置類中!
所以,springboot所有自動(dòng)配置都是在啟動(dòng)的時(shí)候掃描并加載 spring.factories所有的自動(dòng)配置類都在這里面,但是不一定生效,要判斷條件是否成立,只要導(dǎo)入對(duì)應(yīng)的start,就有對(duì)應(yīng)的啟動(dòng)器了,有了啟動(dòng)器,我們自動(dòng)裝配就會(huì)生效,然后就配置成功!
三、結(jié)論:
1. springboot在啟動(dòng)的時(shí)候,從類路徑下/META-INF/ spring.factories獲取指定的值!
2.將這些自動(dòng)配置的類導(dǎo)入容器,自動(dòng)配置就會(huì)生效,幫我進(jìn)行自動(dòng)配置!
3.以前我們需要手動(dòng)配置的東西,現(xiàn)在springboot幫我們做了!
4.整合javaEE,解決方案和自動(dòng)配置的東西都在spring-boot-autoconfigure-2.1.4.RELEASE.jar這個(gè)包下!
5.它會(huì)把所有需要導(dǎo)入的組件,以類名的方式返回,這些組件就會(huì)被添加到容器!
6.容器中也會(huì)存在非常多的xxxAutoConfiguration的文件(@Bean),就是這些類給容器中導(dǎo)入了這個(gè)場(chǎng)景需要的所有組件!
到此這篇關(guān)于Java SpringBoot自動(dòng)裝配原理詳解及源碼注釋的文章就介紹到這了,更多相關(guān)Java SpringBoot 自動(dòng)裝配內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java自定義任務(wù)類定時(shí)執(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í)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12Mybatis詳解動(dòng)態(tài)SQL以及單表多表查詢的應(yīng)用
MyBatis的動(dòng)態(tài)SQL是基于OGNL表達(dá)式的,它可以幫助我們方便的在SQL語(yǔ)句中實(shí)現(xiàn)某些邏輯,下面這篇文章主要給大家介紹了關(guān)于Mybatis超級(jí)強(qiáng)大的動(dòng)態(tài)SQL語(yǔ)句的相關(guān)資料,需要的朋友可以參考下2022-06-06Spring Web MVC框架學(xué)習(xí)之配置Spring Web MVC
這一篇文章講的是Spring Web MVC各部分的配置方法,包括Java代碼配置和XML文件配置以及MVC命名空間的使用方法。2017-03-03