BFPP:BeanFactoryPostProcessor
BPP:BeanPostProcessor
BDRPP:BeanDefinitionRegistryPostProcessor
1、springboot自動(dòng)裝配是什么,解決了什么問題茅特?
- SpringBoot自動(dòng)裝配就是為了從spring.factories中獲取到需要自動(dòng)裝配的類漾唉,并生成相應(yīng)的Bean對(duì)象,然后交給Spring容器進(jìn)行管理饿悬。
2、自動(dòng)裝配實(shí)現(xiàn)的原理 - 當(dāng)啟動(dòng)springboot應(yīng)用程序的時(shí)候,會(huì)先創(chuàng)建SpringApplication的對(duì)象厢漩,在對(duì)象的構(gòu)造方法中會(huì)進(jìn)行某些參數(shù)的初始化工作,最主要的是判斷當(dāng)前應(yīng)用程序的類型以及初始化器和監(jiān)聽器岩臣,在這個(gè)過程中會(huì)加載整個(gè)應(yīng)用程序中的spring.factories文件溜嗜,將文件的內(nèi)容放到緩存對(duì)象中,方便后續(xù)獲取架谎。
- SpringApplication對(duì)象創(chuàng)建完成后炸宵,開始執(zhí)行run方法,來完成整個(gè)啟動(dòng)過程谷扣,啟動(dòng)過程中最主要的有兩個(gè)方法土全,第一個(gè)prepareContext捎琐,第二個(gè)交refreshContext,在這兩個(gè)關(guān)鍵步驟中完成了自動(dòng)裝配的核心功能裹匙,前面的處理邏輯包含了上下文對(duì)象的創(chuàng)建瑞凑,banner的打印,異常報(bào)告器等各個(gè)準(zhǔn)備工作概页,方便后續(xù)來進(jìn)行調(diào)用籽御。
- 在prepareContext方法中主要完成的是對(duì)上下文對(duì)象初始化操作,包括屬性值的設(shè)置惰匙,比如環(huán)境對(duì)象技掏,在整個(gè)過程中有一個(gè)非常重要的方法,叫做load项鬼,load方法主要完成一件事哑梳,將當(dāng)前去啟動(dòng)類作為一個(gè)benDefinition注冊(cè)到registry中,方便后續(xù)在進(jìn)行BeanFactoryPostProcessor調(diào)用執(zhí)行的時(shí)候绘盟,找到對(duì)應(yīng)的主類鸠真,來完成@SpringBootApplication,@EnableAutoConfiguration等注解的解析工作龄毡。