跳至主要內容

13、IOC 的工作流程

安图新大约 2 分钟

13、IOC 的工作流程

一、定义

IOC:全称是 Inversion Of Control,也就是控制反转,它的核心思想是把对象的管理权限交给容器。应用程序如果需要使用某个对象的实例,那么直接从 IOC 容器里面去获取就可以了。

传统应用程序 vs IOC 控制反转:

 
 

这种设计的好处在于降低了对象与对象之间的耦合性,使得程序的整个体系结构变得更加灵活。


二、Bean 的声明方式

Spring 里面提供了很多方式去声明一个 Bean,比如说在 XML 配置文件里面通过 <bean> 标签、 @Service 注解、@Configuration 配置类中的 @Bean 注解去声明等等。

 
 

Spring 在启动过程中会去解析这些 Bean,然后保存到 IOC 容器里面。


三、IOC 的工作流程

Spring 中 IOC 的工作流程大致可以分为三个阶段:

1、 **IOC 容器的初始化阶段:**这个阶段主要是根据程序里面定义的XML或者注解等 Bean 的声明方式,通过解析和加载后生成BeanDefinition实体,然后把 BeanDefinition 注册到 IOC 容器中;

 
 

生成的 BeanDefinition 实体中会包含 Bean 的一些定义和基本属性。最后,把这个 BeanDefinition 保存到一个 Map 集合里面,从而去完成 IOC 的初始化。

IOC 容器的作用就是对这些注册的 Bean 的定义信息进行处理和维护,这是 IOC 容器实现控制反转的核心。 2、 **完成 Bean 的初始化和依赖注入:**进入第二个阶段以后,这个阶段会做两件事:;

1)通过反射去针对没有设置 lazy-init 属性的单例 Bean 进行初始化;

 
 

2)完成 Bean 的依赖注入。 3、 **Bean 的使用:**通常我们会通过@Autowired这样一个注解,或者通过BeanFactory.getBean()从 IOC 容器里面去获取一个指定的 Bean 实例;

 
 

另外,针对设置了 lazy-init 属性以及非单例 Bean 的实例化,是在每一次获取 Bean 对象的时候,调用 Bean 的初始化方法来完成实例化的。并且 Spring IOC 容器不会去管理这些 Bean。

整理完毕,完结撒花~ 🌻