1、初始化AnnotationBeanDefinitionReader
2、初始化ClassPathBeanDefinitionScanner
3、执行register(),注册配置类
4、执行refresh(),先初始化比如BeanFactory这类基础的容器
5、执行invokeBeanFactoryPostProcessors(),主要扫描包和parse (类—>beanDefinition)
6、注册beanPostProcessor,国际化等等
7、将BD变成bean的方法 finishBeanFactoryInitialization(),实例化非延迟的单例
8、首先getBeanDefinition之前,都要合并bd
9、getSingleton第一次——单例池中是否存在单例,并且判断是否在“正在创建bean的set集合”中
10、getSingleton第二次
11、BPP1——是否需要代理bean,代理则直接返回
12、BPP2——推断构造函数
13、BPP3——缓存注入元素的信息
14、BPP4——生产代理工厂,作用是解决循环依赖
15、调用populateBean 主要作用,注入属性
16、BPP5——控制是否需要属性注入
17、再注入缓存的属性之前,先通过 自动注入模型
18、BPP6——注解的属性填充 @Autowired @Resource
19、BPP7——各种aware接口 + 生命周期回调 执行@PostConstruct
20、执行 实现InitializingBean接口的,重写方法,和 xml 中的 init-method="xxx"方法
21、BPP8——aop代理
BD:BeanDefinition
BPP:BeanPostProcessor