13、IOC 的工作流程
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。
整理完毕,完结撒花~ 🌻