Spring IoC 的工作流程

news2024/11/29 20:58:31

概况

        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。

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/975317.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSP 202303-1 田地丈量

样例输入 4 10 10 0 0 5 5 5 -2 15 3 8 8 15 15 -2 10 3 15 样例输出 44 答题 首先写一个计算面积的函数,既然大小固定就省去了比较,然后是将在范围之外的矩阵给忽略掉,接下来将碰到的矩阵大小缩小为范围之内的,累加即可 #in…

剪辑App的MMKV应用优化实践

作者 | 我爱吃海米 导读 移动端开发中,IO密集问题在很多时候没有得到充足的重视和解决,贸然的把IO导致的卡顿放到异步线程,可能会导致真正的问题被掩盖,前人挖坑后人踩。其实首先要想的是,数据存储方式是否合理&#x…

阿里云服务器2核4G5M配置一年和五年价格明细表

阿里云2核4G服务器5M带宽可以选择轻量应用服务器或云服务器ECS,轻量2核4G4M带宽服务器297元一年,2核4G云服务器ECS可以选择计算型c7、c6或通用算力型u1实例等,买5年可以享受3折优惠,阿腾云分享阿里云服务器2核4G5M带宽五年费用表&…

数字城市:科技革命下的未来之城

随着科技的不断进步,数字城市已经成为了未来城市发展的关键趋势。数字城市是指利用先进的信息技术、互联网和大数据等工具,将城市各个方面进行数字化、智能化、互联化的发展模式。它不仅仅是一种技术,更是一种对城市管理、发展和居民生活方式…

基于Springcloud微服务框架 +VUE框架开发的智慧工地系统源码

建筑行业快速发展,各建筑工程的建设规模在不断扩大,各岗位工作人员的工作内容所涉及的方面也越来越广泛。随着信息技术水平不断提高,人工记录的方式已经不能够满足大项目的管理要求,就此,创造出一种新型的施工管理技术——智慧工地…

题①拷贝构造相关笔试题

问:此代码中有几次构造,几次拷贝构造? W f(W u) {W v(u);W w v;return w; } int main() {w x;w y f(x);return 0;解析:一次构造,四次拷贝构造。 再来一题 W f(W u)…

《VulnHub》Empire:Breakout

VulnHub 1:靶场信息2:打靶2.1:情报收集&威胁建模2.2:漏洞分析&渗透攻击 3:总结3.1:命令&工具3.1.1:Nmap 3.2:关键技术 VulnHub 打靶记录。官网:https://www.…

F#奇妙游(28):ADT中简单值的F#实现

简单值的ADT 在领域建模中,我们尝尝会遇到一些简单的值,比如人的名字、人的编号、物品的代码。如果过早进行程序设计,这些值很容易就会变成程序设计语言中的基本量,string、int这些,就比如人的标号和物品的编号&#…

第十五课 状语从句

文章目录 前言一、时间状语从句时间状语从句,主语谓语宾语 或者 主语谓语宾语时间状语从句时间状语从句,主语系动词表语 或者 主语系动词表语时间状语从句1、when,while,as 引导的时间状语从句when主语谓语(宾语)状语when主语系动…

混合查询多家快递,快速掌握物流信息

在现代社会,快递服务已成为我们日常生活的重要组成部分。无论是购物还是文件传递,我们都需要快递服务的帮助。然而,不同的快递公司需要不同的查询方法,这无疑增加了我们的查询难度。因此,有没有一种方法可以让我们一次…

RuntimeError: ANTLR version mismatch

规则引擎源码: nemonik/Intellect: DSL and Rules Engine For Python (github.com) 运行程序 Example.py 时报错: RuntimeError: ANTLR version mismatch: The recognizer has been generated with API V0, but this runtime does not support this. …

svn checkout 报 ‘svn: E000061: 执行上下文错误: Connection refused‘

问题 svn: E170013svn: E000061 ➜ svn svn checkout https://xxx.xxx.xxx.xxx:9443/svn/project-xxx/ svn: E170013: Unable to connect to a repository at URL https://xxx.xxx.xxx.xxx:9443/svn/project-xxx svn: E000061: 执行上下文错误: Connection refused链接在浏览…

收入下降,亏损扩大,利润率急剧恶化,蔚来仍充满风险

来源:猛兽财经 作者:猛兽财经 蔚来第二季度财报分析 猛兽财经从蔚来(NIO)2023年第二季度财报中,获得的最大收获并不是该公司的收入下降或亏损扩大,而是由于价格竞争加剧,中国电动汽车行业整体上…

5700A福禄克FLUKE 5700A多功能校准器

181/2461/8938Fluke 5700A/5720A 高精度多功能校准器 5700A: 世界级标准产品 通过不断的改进、提高,5700A已经演变为5700A系列II。这是福禄克公司生产的、经过大量测试证明、极为可靠的、高精度校准器。5700A已经在全世界的范围被看作是校准器的标准,具有…

使用python对光谱数据进行lorentz峰值拟合(bounds限定拟合参数范围)

1、lorentz峰值拟合 发光光谱是一种用于表征二维半导体材料光学性质的重要技术,它可以反映出材料中的载流子密度、缺陷态、激子束缚能等信息。 由于二维半导体材料的厚度极其薄,其发光信号往往很弱,且受到基底、环境和测量设备等因素的干扰…

1801. 积压订单中的订单总数;1567. 乘积为正数的最长子数组长度;923. 三数之和的多种可能

1801. 积压订单中的订单总数 核心思想:维护一个最小堆sell和一个最大堆buy,然后模拟即可。 1567. 乘积为正数的最长子数组长度 核心思想:动态规划,z表示以当前数字num结尾的乘积为正的最长子数组长度,f表示以当前数字num结尾的乘…

论文开题:成功之门的五大关键策略

研究生、博士生、学者或任何从事研究的人都会面临一个不可避免的环节——论文开题。这一阶段不仅定义了接下来研究的方向,还可能影响到整个项目的成功与否。那么,如何确保你的开题过程能够无瑕通过,还能打动评审人呢?本文将揭示论…

‘无法启动此程序,因为计算机中丢失dll’的多种解决方法分享,最有靠谱的修复方案

当你尝试启动某个程序时,可能会收到类似于"无法启动此程序,因为计算机中丢失DLL"的错误消息。这种错误可能会导致程序无法正常运行,给用户带来不便。在本文中,我们将详细介绍多种解决计算机中丢失DLL的方法,…

rk3568 SDK的buildroot添加package

开发源码工程 首先进入<SDK>/app 目录下&#xff0c;在该目录下创建一个名为“mypackage”的文件夹。 在 mypackage 目录下创建一个.c 源文件 main.c&#xff0c;以及一个 Makefile 文件。 大家可以自己在 main.c 源文件中编写一个简单的测试代码&#xff0c;譬如打印一…

韶音的耳机怎么样,韶音骨传导耳机值得入手吗

韶音关于骨传导耳机的产品在质量方面还是有着不错的表现&#xff0c;其最具代表性的骨传导耳机就是韶音OpenRun Pro&#xff0c;在国产骨传导耳机中是具备了一定的知名度&#xff0c;有着自主研发的声学技术。 最突出的点就在于颜色上多样化&#xff0c;有着经典的黑色&#xf…