Spring IoC 的工作流程

概况

IOC 是什么

Bean 的声明方式

IOC 的工作流程


IOC 是什么

IOC 的全称是 Inversion Of Control, 也就是控制反转,它的核心思想是把对象的管理权限交给容器。

应用程序如果需要使用到某个对象实例,直接从 IOC 容器中去获取就行,这样设计的好处是降低了程序里面对象与对象之间的耦合性。,使得程序的整个体系结构变得更加灵活。


Bean 的声明方式

Spring 里面很多方式去定义 Bean,如下图,比如 XML 里面的标签、@Service、

@Component、@Repository、@Configuration 配置类中的@Bean 注解等等。 Spring 在启动的

时候,会去解析这些 Bean 然后保存到 IOC 容器里面。


IOC 的工作流程

Spring IOC 的工作流程大致可以分为两个阶段。

第一个阶段,就是 IOC 容器的初始化

这个阶段主要是根据程序中定义的 XML 或者注解等 Bean 的声明方式 (如下图)通过解析和加载后生成 BeanDefinition,然后把 BeanDefinition 注册到 IOC 容器。

通过注解或者 xml 声明的 bean 都会解析得到一个 BeanDefinition 实体,实体中包含这个

bean 中定义的基本属性。 最后把这个 BeanDefinition 保存到一个 Map 集合里面,从而完成了

IOC 的初始化。 IOC 容器的作用就是对这些注册的 Bean 的定义信息进行处理和维护,它是 IOC

容器控制反转的核心。


第二个阶段,完成 Bean 初始化及依赖注入

然后进入到第二个阶段,这个阶段会做两个事情:

  1. 通过反射针对没有设置 lazy-init 属性的单例 bean 进行初始化。

  2. 完成 Bean 的依赖注入


第三个阶段,Bean 的使用

通常我们会通过@Autowired 或者 BeanFactory.getBean(),从 IOC 容器中获取指定的 bean 实例。

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

相关推荐
n***84077 分钟前
Spring Boot(七):Swagger 接口文档
java·spring boot·后端
那我掉的头发算什么32 分钟前
【javaEE】多线程 -- 超级详细的核心组件精讲(单例模式 / 阻塞队列 / 线程池 / 定时器)原理与实现
java·单例模式·java-ee
合作小小程序员小小店1 小时前
web网页开发,在线%图书管理%系统,基于Idea,html,css,jQuery,java,ssm,mysql。
java·前端·后端·mysql·jdk·intellij-idea
IUGEI1 小时前
【MySQL】SQL慢查询如何排查?从慢查询排查到最终优化完整流程
java·数据库·后端·mysql·go
程序员-周李斌1 小时前
Java NIO [非阻塞 + 多路复用解]
java·开发语言·开源软件·nio
程序猿小蒜1 小时前
基于Spring Boot的宠物领养系统的设计与实现
java·前端·spring boot·后端·spring·宠物
合作小小程序员小小店1 小时前
web网页开发,在线%食堂管理%系统,基于Idea,html,css,jQuery,java,ssm,mysql。
java·前端·mysql·html·intellij-idea·jquery
奋斗的小高2 小时前
Docker 安装与使用
java
毕设源码-钟学长2 小时前
【开题答辩全过程】以 浮生馆汉服租赁管理系统为例,包含答辩的问题和答案
android·java·tomcat
90后小陈老师2 小时前
用户管理系统 07 项目前端初始化 | 新手实战 | 期末实训 | Java+SpringBoot+Vue
java·前端·spring boot