系列文章目录
前言
invokeBeanFactoryPostProcessors(beanFactory)
主要是实例化并调用已经注册的 BeanFactoryPostProcessor 的方法
包括 Spring 自己注册的 ConfigurationClassPostProcessor 和 用户自己注册的
AbstractApplicationContext 维护了容器 beanFactoryPostProcessors, 用于保存用户自己注册的 BeanFactoryPostProcessor
当前阶段已注册的 BeanfactoryPostProcessor 只有解析配置类的 ConfigurationClassPostProcessor, 所以这里会解析配置类, 把配置类本身, 配置类上面的 @ComponentScan, @Component, @Import, @ImportResouce, @Service 等注解都解析出来, 生成对应的 BeanDefinition 并注册到容器中
invokeBeanFactoryPostProcessors(beanFactory);
protected void invokeBeanFactoryPostProcessors(ConfigurableListableBeanFactory beanFactory) {
//
PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors());
// Detect a LoadTimeWeaver and prepare for weaving, if found in the meantime
// (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()));
}
}