1.BeanFactoryPostProcessor
BeanFactoryPostProcessor:beanFactory的后置處理器玖像。
作用如下:
- a)在BeanFactory標(biāo)準(zhǔn)初始化之后調(diào)用,來定制和修改BeanFactory的內(nèi)容;
- b)所有的bean定義已經(jīng)保存加載到beanFactory,但是bean的實(shí)例還未創(chuàng)建
注意:之前也講過BeanPostProcessor,它是bean后置處理器,bean創(chuàng)建對(duì)象初始化前后進(jìn)行攔截工作的
@Component
public class JamesBeanFactoryPostProcessor implements BeanFactoryPostProcessor{
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println("JamesBeanFactoryPostProcessor.....調(diào)用了BeanFactoryPostProcessor.postProcessBeanFactory()");
//所有bean的定義伸眶,已經(jīng)加載到beanFactory, 但是bean實(shí)例還沒創(chuàng)建
int count = beanFactory.getBeanDefinitionCount();
String[] beanDefName = beanFactory.getBeanDefinitionNames();
System.out.println("當(dāng)前BeanFactory中有"+count+"個(gè)Bean");
System.out.println(Arrays.asList(beanDefName));
}
}
結(jié)果:
JamesBeanFactoryPostProcessor.....調(diào)到了BeanFactoryPostProcessor.postProcessBeanFactory()
當(dāng)前BeanFactory中有11個(gè)Bean
[org.springframework.context.annotation.internalConfigurationAnnotationProcessor, org.springframework.context.annotation.internalAutowiredAnnotationProcessor, org.springframework.context.annotation.internalRequiredAnnotationProcessor, org.springframework.context.annotation.internalCommonAnnotationProcessor, org.springframework.context.event.internalEventListenerProcessor, org.springframework.context.event.internalEventListenerFactory, ch12MainConfig, jamesBeanDefinitionRegistryPostProcessor, jamesBeanFactoryPostProcessor, getMoon, hello]
Moon constructor........
-
調(diào)用時(shí)機(jī)(調(diào)用棧)
2.BeanDefinitionRegistryPostProcessor
@Component
public class JamesBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
System.out.println("JamesBeanDefinitionProcessor..postProcessBeanFactory(),Bean的數(shù)量"+beanFactory.getBeanDefinitionCount());
}
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
System.out.println("amesBeanDefinition.postProcessBeanDefinitionRegistry()...bean的數(shù)量"+registry.getBeanDefinitionCount());
//RootBeanDefinition rbd = new RootBeanDefinition(Moon.class);
AbstractBeanDefinition rbd = BeanDefinitionBuilder.rootBeanDefinition(Moon.class).getBeanDefinition();
registry.registerBeanDefinition("hello", rbd);
}
}
結(jié)果:
amesBeanDefinition.postProcessBeanDefinitionRegistry()...bean的數(shù)量10
JamesBeanDefinitionProcessor..postProcessBeanFactory(),Bean的數(shù)量11
Moon constructor........
調(diào)用棧為:
3.總結(jié)
先執(zhí)行BeanDefinitionRegistryPostProcessor的處理器,而BeanFactoryPostProcessor的處理器在它后面執(zhí)行刽宪。
參考
- 1)享學(xué)課堂James老師筆記