06|再回首:如何实现一个IoC容器?
郭屹
你好,我是郭屹。
第一阶段的学习完成啦,你是不是自己也实现出了一个简单可用的 IoC 容器呢?如果已经完成了,欢迎你把你的实现代码放到评论区,我们一起交流讨论。
我们这一章学的 IoC(Inversion of Control)是我们整个 MiniSpring 框架的基石,也是框架中最核心的一个特性,为了让你更好地掌握这节课的内容,我们对这一整章的内容做一个重点回顾。
IoC 重点回顾
IoC 是面向对象编程里的一个重要原则,目的是从程序里移出原有的控制权,把控制权交给了容器。IoC 容器是一个中心化的地方,负责管理对象,也就是 Bean 的创建、销毁、依赖注入等操作,让程序变得更加灵活、可扩展、易于维护。
在使用 IoC 容器时,我们需要先配置容器,包括注册需要管理的对象、配置对象之间的依赖关系以及对象的生命周期等。然后,IoC 容器会根据这些配置来动态地创建对象,并把它们注入到需要它们的位置上。当我们使用 IoC 容器时,需要将对象的配置信息告诉 IoC 容器,这个过程叫做依赖注入(DI),而 IoC 容器就是实现依赖注入的工具。因此,理解 IoC 容器就是理解它是如何管理对象,如何实现 DI 的过程。
举个例子来说,我们有一个程序需要使用 A 对象,这个 A 对象依赖于一个 B 对象。我们可以把 A 对象和 B 对象的创建、配置工作都交给 IoC 容器来处理。这样,当程序需要使用 A 对象的时候,IoC 容器会自动创建 A 对象,并将依赖的 B 对象注入到 A 对象中,最后返回给程序使用。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文详细介绍了如何实现一个IoC容器,从原始IoC实现开始,逐步扩展Bean,解决循环依赖问题,并支持注解。文章强调了在单例模式下,容器管理所有的Bean时,多线程环境下可能存在线程安全问题,并提出了避免共享数据、使用线程安全的数据结构、同步和使用ThreadLocal等方法来保证数据的线程安全性。读者可以通过本文了解IoC容器的实现原理,包括对象实例化、依赖注入、构造器注入和注解支持等技术特点。文章内容丰富,适合技术人员深入学习和交流讨论。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一个 MiniSpring》,新⼈⾸单¥59
《手把手带你写一个 MiniSpring》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(5)
- 最新
- 精选
- 郭硕老师多讲一些在SUN公司能了解到的关于Spring的内幕吗,比如出了什么特性,当时SUN内部的反应。目前老师讲的这些在网上基本都能搜到,没有比一般的博主深入太多。感觉不能体现出来老师的在SUN任职过的特殊经历,更想听听当时的历史背景和演化的过程。
作者回复: 真没什么内幕。
2023-03-24归属地:浙江7 - Jay有两个问题需要请教一下老师: 1. 构造器注入和setter注入对比中构造器优点第三条:“适用于生命周期较短的对象,对象在实例化时会获得所需要的的依赖,对象销毁时也会自动释放”。 目前我们所实现的IoC容器还没有对象销毁功能,所有的示例都还保存在容器中,那也就不会被JVM回收吧?后续是否需要实现bean的销毁功能呢? 2. 没想明白怎么实现“构造器注解autowired注入”:autowired processor是在bean实例化之后,也就是构造函数完成之后,那这个时候还如何通过autowired注入呢?这个时候构造函数要么调用完成了,要么调用失败了呀?
作者回复: 1,没有实现销毁功能。 2,实例化时通过反射调用构造函数进行的,在准备构造函数参数的时候遇到bean就再次调用getBean()就可以了。
2023-03-24归属地:湖北3 - peter请问:ThreadLocal方法有数据一致性问题吗?假设两个线程共享数据A,线程1在自己的ThreadLocal中有副本A1,线程2在自己的ThreadLocal中有副本A2,那么,A1、A2和A之间会存在数据一致性问题吗? A1、A2需要更新到A吗?
作者回复: ThreadLocal设计思路不是为了共享和同步而是为了隔离,多个线程隔离开的。你的例子中A1和A2是没有关系的,不存在共享A的问题。
2023-03-25归属地:山西1 - Geek_a551cbListableBeanFactory和ConfigurableBeanFactory都继承自BeanFactory;ConfigurableListableBeanFactory又继承ListableBeanFactory和ConfigurableBeanFactory;可不可以改成ConfigurableListableBeanFactory继承Listable、Configurable和BeanFactory;重复继承总感觉不好
作者回复: follow Spring本身
2024-02-14归属地:四川 - Geek_08c860代码仓库:https://gitee.com/funktest7ff/mini-spring 划分了多个模块,每个模块是一个版本的实现2023-12-20归属地:北京
收起评论