Spring(13) IOC的工作流程

目录

    • 一、定义
    • 二、Bean的声明方式
    • 三、IOC的工作流程

一、定义

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

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

Spring(13) IOC的工作流程_第1张图片

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


二、Bean的声明方式

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

Spring(13) IOC的工作流程_第2张图片

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


三、IOC的工作流程

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

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

    Spring(13) IOC的工作流程_第3张图片

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

    IOC 容器的作用就是对这些注册的 Bean 的定义信息进行处理和维护,这是 IOC 容器实现控制反转的核心。

  2. 完成 Bean 的初始化和依赖注入: 进入第二个阶段以后,这个阶段会做两件事:

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

    Spring(13) IOC的工作流程_第4张图片

    2)完成 Bean 的依赖注入。

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

    Spring(13) IOC的工作流程_第5张图片

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

整理完毕,完结撒花~

你可能感兴趣的:(Spring,spring,java,后端)