在通過BeanFactoryPostProcessor來手動干預springbean加載狀態(tài)時,有兩點需要注意:
-
是否需要實現PriorityOrdered接口。
spring處理BeanFactoryPostProcessor類型的bean,主要是通過AbstractApplicationContext中的invokeBeanFactoryPostProcessors來處理,主要代碼如下:
image.png實現了PriorityOrdered接口的Processor會放在第一優(yōu)先級隊列中執(zhí)行,并且通過設置優(yōu)先級,可以執(zhí)行Processor的執(zhí)行順序(注意:Spring自帶的Processor都被默認設置了最低優(yōu)先級)。
是否需要初始化bean
ListableBeanFactory中有個重要的接口getBeanNamesForTypes
,該接口支持兩種傳參類型,若不希望在調用接口后會觸發(fā)bean的初始化工作,需使用String[] getBeanNamesForType(Class type, boolean includeNonSingletons, boolean allowEagerInit)
,并將最后的allowEagerInit參數置為true。