refresh()
1、准备工作;
prepareRefresh();
2、创建beanFactory
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
但是还没有填充属性
3、对beanFactory填充属性
prepareBeanFactory(beanFactory);
4、PostProcessBeanFactory
没有具体实现方法,子类覆盖方法做额外的处理,此处我们自己一般不做任何拓展工作
5、调用各种beanFactory处理器
invokeBeanFactoryPostProcessors(beanFactory);
6、注册bean处理器
registerBeanPostProcessors(beanFactory);
只是注册,真正调用的是getBean方法
7、国际化处理
initMessageSource();
8、初始化事件监听多路广播器
initApplicationEventMulticaster();
9、初始化剩下的单实例(非懒加载的)
finishBeanFactoryInitialization(beanFactory);
beanFactory.preInstantiateSingletons();
实例化所有非懒加载对象
- List beanNames = new ArrayList<>(this.beanDefinitionNames);
- 将所有beandefintion的名字创建一个集合