prepareBeanFactory方法在AbstractApplicationContext.refresh流程中。对前面获取到的beanFactory(ConfigurationListableBeanFactory)进行相关的设置,包括ClassLoader, post-processors,为后续的使用做准备。
代码如下:
1 | protected void prepareBeanFactory(ConfigurableListableBeanFactory beanFactory) { |
beanPostProcessors中当前有ApplicationContextAwareProcessor、ApplicationListenerDetector两个beanPostProcessor
beanFactory.addBeanPostProcessor做的工作是增加BeanPostProcessor。在AbstractBeanFactory的List<BeanPostProcessor> beanPostProcessors中加入BeanPostProcessor。
beanFactory.ignoreDependencyInterface做的工作是忽略特定的类。在AbstractAutowireCapableBeanFactory的Set<Class<?>> ignoreDependencyInterfaces中加入需要被忽略的类。
beanFactory.registerResolvableDependency做的工作是为某些类注入特定的值。在DefaultListableBeanFactory的Map<Class<?>, Object> resolvableDependencies中加入依赖的值(dependencyType)、注入的值(autowiredValue)。
beanFactory.registerSingleton做的工作是在beanFactory中注册单例。在DefaultSingletonBeanRegistry的Map<String, Object> singletonObjects中加入(beanName, singletonObject);在DefaultSingletonBeanRegistry的Set<String> registeredSingletons中加入beanName