当前位置: 首页 > news >正文

IOC和Bean

IOC

IOC将对象的创建依赖关系的管理生命周期的控制从应用程序代码中解耦出来了

IOC容器的依赖注入(DI)

在程序运行过程中动态的向某个对象中注入他所需要的其他对象

依赖注入是基于反射实现的

Spring IOC 容器使用的是Map(concorrentMap)来存储Bean(Object)

概念

IOC,就是控制反转,也被称为依赖注入

在 Spring没出现之前,当一个对象需要使用其他对象来完成某些操作,就需要我们自己去创建或查找这些依赖的对象。

现在,有了 Spring,我们的对象交给 Spring管理,这些对象可以理解为存放在一个容器中的,这个容器就称为 Spring IoC 容器在 IoC 容器中,对象不再自己管理它们的依赖,而是通过构造方法参数、工厂方法的参数或者在对象创建后通过属性设置来定义它们的依赖关系。

Spring的 IoC 容器负责在创建对象时注入它们依赖的其他对象,也就是自动地把依赖的对象提供给需要它们的对象。这样一来,对象不再需要主动去查找或创建它们的依赖,而是由容器在创建对象时帮助它们完成依赖注入的过程。

控制反转的概念主要是与传统的直接构造(即 new 操作)来控制对象依赖的方式相反。传统方式中,一个对象通常会直接创建或查找它所依赖的其他对象,而在 IoC 中,对象将自身的控制权交给了容器,容器负责管理对象的创建和依赖注入,因此被称为「控制反转」。

Bean

Bean生命周期的四个阶段

Bean循环依赖

  • 通过field属性注入循环依赖(也就是注解@Autowired),IOC容器可能会解决掉

  • 通过构造器注入循环依赖,IOC容器不会解决掉

Spring解决循环依赖

使用三级缓存解决循环依赖

  • 第一级缓存:缓存的是已经实例化,属性注入,初始化的Bean对象(功能完备的bean)

private final Map<String, Object> singletonObjects = new ConcurrentHashMap<>(256);
  • 第二级缓存:缓存的是实例化之后没有完成属性注入,初始化的Bean对象(也就是new出来没有填充依赖属性的bean) 意义:提前暴露Bean,让其他的Bean知道这个Bean存在于IOC之中

private final Map<String, Object> earlySingletonObjects = new HashMap<16>;
  • 第三级缓存:生成原始对象进行AOP操作后的代理对象

private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<>(16);

存在缓存依赖的Bean实例化的过程

相关文章:

  • 1 2 3 4 5顺序插入,形成一个红黑树
  • 区块链技术中的Java SE实战:从企业级应用到5大核心问题解析
  • R 语言科研绘图 --- 桑基图-汇总
  • Kubernetes生产实战(十四):Secret高级使用模式与安全实践指南
  • AI Agent(8):安全与伦理考量
  • PyTorch API 4 - 分布式通信、分布式张量
  • SpringCloud之Eureka基础认识-服务注册中心
  • 一、数据仓库基石:核心理论、分层艺术与 ETL/ELT 之辨
  • 第十七次博客打卡
  • MySQL 从入门到精通(六):视图全面详解 —— 虚拟表的灵活运用
  • vue开发用户注册功能
  • JVM 数据区域
  • 微服务6大拆分原则
  • Linux 下 Java 部署环境搭建与项目部署详细步骤
  • PyTorch 线性回归模型构建与神经网络基础要点解析
  • 【金仓数据库征文】学校AI数字人:从Sql Server到KingbaseES的数据库转型之路
  • 十六、统一建模语言 UML
  • cdn 是什么?
  • AIGC时代大模型幻觉问题深度治理:技术体系、工程实践与未来演进
  • LSP里氏替换原则
  • 时隔14个月北京怀柔区重启供地,北京建工以3.59亿元摘得
  • 马上评丨维护学术诚信别陷入“唯AI检测”误区
  • 101条关于减重的知识,其中一定有你不知道的
  • 看展览|2025影像上海艺博会:市场与当代媒介中的摄影
  • 欧盟公布关税反制清单,瞄准美国飞机、汽车等产品
  • 105岁八路军老战士、抗美援朝老战士谭克煜逝世