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