想象一下,Spring IOC容器就像一个大型的仓库,它的任务是存储和管理各种物品(在这里,物品就是Bean)。但是,在仓库开始工作之前,它需要先进行一系列的准备工作,这就是IOC容器的初始化过程。
这个过程可以分为三个主要步骤:
1. Resource定位:
• 这一步就像是仓库管理员先要去找到存放物品的清单或地图。在Spring中,这个“清单或地图”就是BeanDefinition,它描述了Bean的各种信息。
• Resource定位就是由ResourceLoader通过统一的Resource接口来完成,找到这些BeanDefinition资源的位置。这些BeanDefinition可以存在于文件系统中、类路径中,或者其他形式。
2. BeanDefinition载入:
• 找到了物品清单后,仓库管理员就要把清单上的物品信息录入到仓库的管理系统中。在Spring中,这一步就是把BeanDefinition载入到IOC容器内部。
• 载入过程实际上是把用户定义好的Bean表示为容器内部的数据结构,这个数据结构就是BeanDefinition。它就像是POJO对象(普通的Java对象)在IOC容器中的“身份证”,记录了Bean的各种属性和行为。
3. BeanDefinition注册:
• 最后一步,仓库管理员要把录入的信息保存到仓库的数据库中,以便以后可以随时查询和管理。在Spring中,这一步就是把BeanDefinition注册到IOC容器中。
• 注册过程是通过BeanDefinitionRegistry接口来完成的,它实际上是把BeanDefinition保存到一个HashMap中。这样,IOC容器就可以通过这个HashMap来持有和管理所有的BeanDefinition数据了。
完成了这三个步骤后,Spring IOC容器就初始化完成了,它就可以开始存储和管理各种Bean了。
值得注意的是,IOC容器的初始化过程并不包含Bean的依赖注入。依赖注入是发生在应用第一次通过getBean方法向容器索取Bean的时候,或者在某些特殊情况下(如设置了lazy-init属性),Bean的依赖注入可能会在IOC容器初始化时就预先完成。
标签:容器,仓库,Spring,Bean,IOC,BeanDefinition From: https://blog.csdn.net/qq_44378083/article/details/144751813