控制反转
* 我们不创建对象,我们只向容器中申请对象
* IOC 容器的工作流程
1. 解析配置文件或配置类并得到元信息
2. 将元信息封装成 BeanDefinition,并向 BeanDefinitionRegistry 注册
3. 使用三级缓存处理循环依赖最终得到依赖关系
4. 根据 BeanDefinition 和依赖关系,使用反射将 Bean 实例化,注入到 ApplicationContext 中
5. 注入完成后使用 BeanPostProcessor 对 Bean 进行初始化
6. 使用 Bean
7. 管理 Bean
8. 释放 Bean
* 该过程可以说是 Spring Boot 也可以说是 Springframework 关键在于配置文件是 xml 文件还是 factories 文件