Spring IOC:IOC在Spring底层中如何实现?

news/2025/2/1 21:58:11/

编译软件:IntelliJ IDEA 2019.2.4 x64
操作系统:win10 x64 位 家庭版
Maven版本:apache-maven-3.6.3
Mybatis版本:3.5.6
spring版本:5.3.1


文章目录

  • Spring系列专栏文章目录
  • 一. 什么是IOC?
  • 二. IOC在spring中的实现
    • 2.1 在spring底层中,IOC如何实现?
      • 2.1.1 BeanFactory与ApplicationContexet接口
      • 2.1.2 IOC类的图解


Spring系列专栏文章目录

  • 第一章:初识Spring:如何在Maven工程上搭建Spring框架?
  • 第二章:Spring IOC:IOC在Spring底层中如何实现?

一. 什么是IOC?

IOC,英文全称为Inversion of Control,意为反转控制。不是什么新的开发技术,而是一种开发设计思想

我们都知道在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需要的资源,在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式,增加了学习成本,同时降低了开发效率。

这里的组件是什么?

在Spring框架中,组件(Component)是指可以被Spring容器管理和配置的对象,包括Java类和Bean等。

反转控制的思想完全颠覆了上述的传统方式:即反转了资源的获取方向,变成容器主动的将资源推送给需要的组件开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源的方式即可,极大的降低了学习成本,提高了开发的效率。

在这里插入图片描述

例如,当我们突然想吃红烧狮子头这道菜,传统的方式是我们自己去菜市场买菜,购置并准备烹饪这道菜的原材料,调料与烹饪工具,自己动手做这道菜。而使用IOC的思想来看,就是我们去饭馆吃饭,点上红烧狮子头这道菜,让饭馆给我们做,我们不需要准备这道菜的原材料和做法。这有点类似面向对象的设计思想–“我不做,我让你去做”


二. IOC在spring中的实现

我们都知道spring框架中的核心部分是“IOC”思想,即控制反转。当应用程序启动时,spring容器会帮助开发者去创建相应的对象,注意是spring容器在创建对象,并将需要的依赖关系在运行时注入到对象中,这个依赖关系的注入过程就被称为依赖注入【DI】

那什么是依赖关系?

用通俗的话来说,就是“我需要你,所以我依赖于你,我和你是依赖关系;而你是独立的,可以不需要我”,比如,我们中国人吃饭,都是拿筷子夹菜,扒饭吃。在这一现象中,我们在吃饭的过程中需要用到筷子,我们依赖于筷子,而筷子不需要依赖谁。ok,我们和筷子构成了依赖关系。在Java程序中,可以这样设计,将我们中国人提取抽象为一个ChinesePerson类,筷子也抽象为chopsticks类,ChinesePerson类需要用到筷子,可以把chopsticks类【筷子】作为它的成员属性。

依赖注入,谁注入谁?注入了什么?

IOC容器会注入应用程序依赖的对象,注入依赖的对象它所需要的外部资源(包括对象、资源、常量数据),比如基于上面的案例情景中,IOC容器会在ChinesePerson类为它的成员属性注入它所依赖的对象,即chopsticks类的对象。

2.1 在spring底层中,IOC如何实现?

它主要通过BeanFactory和ApplicationContext两个接口来实现

2.1.1 BeanFactory与ApplicationContexet接口

  • BeanFactoryIOC容器的基本实现,是Spring内部的使用接口,它主要负责创建并管理bean对象,是面向Spring本身的,并不提供给开发人员 使用的
  • ApplicationContextBeanFactory的子接口,它提供了更多的高级特性支持,例如AOP与事务传递机制等等。它是面向Spring的使用者,几乎所有场合都能使用它

2.1.2 IOC类的图解

在这里插入图片描述

  • BeanFactory接口:Springl底层IOC实现【面向Spring框架】
    • ApplicationContext子接口:面向程序员
      • ConfigurableApplicationContext子接口:提供关闭或刷新容器对象方法
        • ClassPathXmlApplicationContext:基于类路径检索xml文件【推荐这种】
        • FileSystemXmlApplicationContext:基于文件系统检索xml文件

http://www.ppmy.cn/news/66456.html

相关文章

皮特测评:蓝牙耳机哪个品牌最好?300元内最好的蓝牙耳机

大家好,我是皮特,今天要发布的测评主题是:“蓝牙耳机哪个品牌最好?”粉丝们私信给我希望能分享一期平价好用的蓝牙耳机,我购入十多款蓝牙耳机进行了多角度的测评后,总结了五款表现最优秀的蓝牙耳机&#xf…

Java 锁机制详解

Java中的锁机制是使用最广泛、最基础的多线程同步技术之一,也是保证线程安全的重要手段。本文将从以下几个方面全面详细地讲解Java中的锁机制: 锁的概念和作用synchronized关键字及其使用方法Java中的锁类型Lock接口及其实现类乐观锁与悲观锁锁的性能分…

网安学习路线!史上最详细没有之一

我经常会看到这一类的问题: 学习XXX知识没效果;学习XXX技能没方向;学习XXX没办法入门; 给大家一个忠告,如果你完全没有基础的话,前期最好不要盲目去找资料学习,因为大部分人把资料收集好之后&…

【C++学习】类和对象(下)

目录 一、再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表 1.3 初始化列表的注意事项 1.4 explicit关键字 二、static成员(静态成员变量 & 静态成员函数) 2.1 概念: 2.2 特征 三、友元 3.1 友元函数 3.2 友元类 四、内部类 …

物联网架构和技术:如何实现物物互联和智能化控制

第一章:引言 物联网是一种新兴的技术领域,通过将物理设备、传感器和软件等连接起来,可以实现设备之间的互联互通,让各种设备可以进行数据交换和智能化控制。在这个数字化时代,物联网已经成为了连接万物的关键技术之一…

Git合并冲突的根本原因和解决方法

假如您现在正在参与一个团队项目,并取得了实质性的进展。然而,当你准备提交代码的时候,发现团队中的某个人也更改了同一个文件,并且先你一步提交了——您现在遇到了代码冲突问题。而且需要花时间去解决自己的更改与别人的更改之间…

非煤矿山电子封条 yolov7

非煤矿山电子封条通过yolov7python网络模型技术,非煤矿山电子封条可以对矿山主副井口、风井口、车辆出入口和调度室等全天候不间断实时分析预警,发现人员违规行为及异常设备状态立即告警。YOLOv7 的发展方向与当前主流的实时目标检测器不同,研…

[IAR][CC2642R1] IDE安装和环境搭建,CC2642的环境配置

文章目录 一、IAR安装(1)压缩包下载(2)IAR安装(3) 注册(4) 补丁 二、在IAR中使用CC2642(0)打开IAR,配置环境。(1)例程位置(2)打开例程&#xff08…