BFPP:BeanFactoryPostProcessor
BPP:BeanPostProcessor
BDRPP:BeanDefinitionRegistryPostProcessor
1、springboot自動(dòng)裝配是什么,解決了什么問(wèn)題?
- 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)聽(tīng)器,在這個(gè)過(guò)程中會(huì)加載整個(gè)應(yīng)用程序中的spring.factories文件,將文件的內(nèi)容放到緩存對(duì)象中,方便后續(xù)獲取。
- SpringApplication對(duì)象創(chuàng)建完成后,開(kāi)始執(zhí)行run方法,來(lái)完成整個(gè)啟動(dòng)過(guò)程,啟動(dòng)過(guò)程中最主要的有兩個(gè)方法,第一個(gè)prepareContext,第二個(gè)交refreshContext,在這兩個(gè)關(guān)鍵步驟中完成了自動(dòng)裝配的核心功能,前面的處理邏輯包含了上下文對(duì)象的創(chuàng)建,banner的打印,異常報(bào)告器等各個(gè)準(zhǔn)備工作,方便后續(xù)來(lái)進(jìn)行調(diào)用。
- 在prepareContext方法中主要完成的是對(duì)上下文對(duì)象初始化操作,包括屬性值的設(shè)置,比如環(huán)境對(duì)象,在整個(gè)過(guò)程中有一個(gè)非常重要的方法,叫做load,load方法主要完成一件事,將當(dāng)前去啟動(dòng)類作為一個(gè)benDefinition注冊(cè)到registry中,方便后續(xù)在進(jìn)行BeanFactoryPostProcessor調(diào)用執(zhí)行的時(shí)候,找到對(duì)應(yīng)的主類,來(lái)完成@SpringBootApplication,@EnableAutoConfiguration等注解的解析工作。