AbstractApplicationContext.run()
方法执行过程中,在BeanFactory
被准备(prepare)和postProcess之后,
AbstractApplicationContext
的invokeBeanFactoryPostProcessors()
方法被调用,这个方法用来应用被作为bean注册到容器中的所有BeanFactoryPostProcessor
实例,其实现如下 :
protected void invokeBeanFactoryPostProcessors(
ConfigurableListableBeanFactory beanFactory) {
// 真正的BeanFactoryPostProcessor执行任务委托给
// Spring工具类PostProcessorRegistrationDelegate完成
PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(
beanFactory,
getBeanFactoryPostProcessors());
// 如果同时发现了一个LoadTimeWeaver就做相应的织入准备
// (e.g. through an @Bean method registered by ConfigurationClassPostProcessor)
if (beanFactory.getTempClassLoader() == null
&& beanFactory.containsBean(LOAD_TIME_WEAVER_BEAN_NAME)) {
beanFactory.addBeanPostProcessor(new LoadTimeWeaverAwareProcessor(beanFactory));
beanFactory.setTempClassLoader(
new ContextTypeMatchClassLoader(beanFactory.getBeanClassLoader()));
}
}