1. BeanFactoryPostProcessor
這個(gè)接口是用來(lái)干什么的?
根據(jù)這個(gè)接口的注釋可以知道,這個(gè)接口在 BeanFactory 標(biāo)準(zhǔn)初始化之后調(diào)用,來(lái)定制和修改BeanFactory的內(nèi)容;
執(zhí)行點(diǎn)
更具體一些就是:在所有的bean定義
已經(jīng)加載(注意這里說的是已經(jīng)
)到容器绑洛,但是bean的實(shí)例還未創(chuàng)建。
這個(gè)可以從 AbstractApplicationContext 的 refresh方法 的步驟可以觀察到童本,invokeBeanFactoryPostProcessors 的時(shí)候執(zhí)行的真屯,在 finishBeanFactoryInitialization 之前,而finishBeanFactoryInitialization 是用來(lái)創(chuàng)建剩余單例穷娱,也就是在單例創(chuàng)建之前調(diào)用讨跟。
2. BeanDefinitionRegistryPostProcessor
用來(lái)干什么
這個(gè)其實(shí)是 BeanFactoryPostProcessor 接口的子接口,增加了一個(gè)專門的功能:向容器中再注冊(cè)一些Bean定義鄙煤。
執(zhí)行點(diǎn)
在所有bean定義
將要被加載晾匠,注意這里說的是將要
,所以這個(gè)接口是比BeanFactoryPostProcessor 更早執(zhí)行梯刚,在Bean定義還沒加載的時(shí)候就執(zhí)行凉馆;