先导知识:
1. Spring IoC容器
IoC:控制反转
DI:依赖注入
Spring框架负责控制对象的生命周期和对象间的关系。
IoC使对象只需要关心业务逻辑本身,这些互相依赖的对象的创建和协调等工作交给Spring容器来做。对象如何得到它的协作对象的责任就被反转给Spring了。告诉Spring容器这里需要某个bean,它就会丢个实例过来。
容器中的每个bean都有一个对应的BeanDefinition实例,负责保存bean对象的所有必要信息。如bean 对象的 class 类型、是否是抽象类、构造方法和参数、其它属性等等。
BeanFactory:getBean、containBean、getType、getAliases
BeanDefinitionRegistry:registerBeanDefinition、removeBeanDefinition、getBeanDefinition
DefaultListableBeanFactory实现了BeanFactory和BeanDefinitionRegistry接口,负责bean的注册管理工作。
Spring IoC容器的工作流程主要分为两阶段:启动阶段和实例化阶段。
- 启动阶段:
容器启动时会通过一些工具类等加载Configuration MetaData,将其解析后组装成相应的BeanDefinition,然后将保存了bean信息的BeanDefinition注册到BeanDefinitionRegistry。
- 实例化阶段:
经过第一阶段,所有 bean 定义都通过 BeanDefinition 的方式注册到 BeanDefinitionRegistry 中,当某个请求通过容器的 getBean 方法请求某个对象&#