AnnotationConfigApplicationContext的构造方法(做了三件事)
- 调用父类的无参构造方法,子类无参构造方法
父类构造方法中new了DefaultListableBeanFactory
子类构造方法中创建了一个reader和scaner
- 调用register完成注册
这里完成了Spring内置类和配置类的注册,将配置类转为bd
- 调用refresh方法
1.prepareBeanFactory准备工厂,也就是上一个步骤new的DefaultListableBeanFactory
2.invokeBeanFactoryPostProcessors通过上一个步骤注册的ConfigurationClassPostProcessor,解析配置类(包括加了 @Component@Service @Import等)执行BeanFactoryPostProcessors的方法
3.registerListeners,注册监听器,实现了ApplicationListener接口的类
4.finishBeanFactoryInitialization,注册一些默认的bean,比如valueResolver,然后会将单利的bean初始化,在bean初始化的 前后会执行BeanPostProcessor的方法。