@Configuration
、@ImportSelector
一样,可用于@Import
中,可动态导入Bean。1和2可以同时使用。
(Object bean, String beanName)
,因此可以修改Bean对象。它们的区别是:
在refresh中调用了PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors
。PostProcessorRegistrationDelegate是AbstractApplicationContext委托执行post processors任务的工具类。
这里的postProcessor包括这几类:
Spring探秘|妙用BeanPostProcessor
ServletWebServerApplicationContext.postProcessBeanFactory
中,调用
beanFactory.addBeanPostProcessor(new WebApplicationContextServletContextAwareProcessor(this));
由此涉及到BeanPostProcessor的学习。 实现了接口后,会在Bean的初始化前后调用 postProcessBeforeInitialization和postProcessAfterInitialization。 在代理模式中,这个机制很好用。