Spring IOC,DI原理保姆级带你了解如,让面试官感到你的魅力

Spring IOC,DI原理保姆级带你了解如,让面试官感到你的魅力

一,什么是IOC

在这里插入图片描述

1.开始:Spring IoC容器的创建。

容器初始化:初始化IoC容器,包括加载配置文件、解析配置文件等。
加载XML/Java配置文件:从文件中加载Bean定义的配置信息。
解析配置文件:解析配置文件中的信息,创建对应的BeanDefinition对象。
创建BeanDefinition对象:根据配置文件的定义,创建一个对应的BeanDefinition对象。

2.注册Bean定义到IoC容器:

将BeanDefinition对象注册到IoC容器中,以便容器可以管理这些Bean。

3.解析依赖关系:

根据配置文件中的依赖关系,解析并创建相应的依赖关系。
实例化Bean:使用反射机制实例化每个Bean。
执行Bean的自定义初始化方法:在实例化后,执行Bean的自定义初始化方法(如init-method)。

4.填充Bean属性:

根据配置文件中的属性信息,为每个Bean设置属性值。
如果Bean实现了BeanNameAware接口,设置Bean名称:如果Bean实现了BeanNameAware接口,将为其设置一个唯一的名称。
如果Bean实现了BeanFactoryAware接口,注入BeanFactory实例:如果Bean实现了BeanFactoryAware接口,将为其注入一个BeanFactory实例,以便其可以访问容器中的其他Bean。
如果Bean实现了ApplicationContextAware接口,注入ApplicationContext实例:如果Bean实现了ApplicationContextAware接口,将为其注入一个ApplicationContext实例,以便其可以访问容器中的其他资源。
执行BeanPostProcessor的前置处理:在初始化前,通过BeanPostProcessor接口对每个Bean进行处理。

5.执行自定义的销毁方法:

在销毁时,执行Bean的自定义销毁方法(如destroy-method)。

6.将Bean实例保存到IoC容器中:

将每个已经初始化的Bean实例保存到IoC容器中,以便后续使用。

7.oC容器可以提供/注入Bean实例:

IoC容器可以提供或注入已经初始化的Bean实例给其他组件使用。
结束:完成整个流程。

二,什么是DI

在这里插入图片描述

1.Spring DI容器:

Spring提供的用于管理Bean的容器。它可以通过名称来获取或注入Bean实例。容器可以自动管理Bean的生命周期,包括实例化、初始化、使用和销毁等。

2.加载配置文件:

从文件系统中加载配置文件,如XML或Java配置文件。还可以通过其他方式加载配置文件,如通过注解或使用编程方式等。

3.解析配置文件:

解析配置文件中的信息,将其转换为内部的数据结构,以便后续的处理。解析器会根据配置文件的类型不同而有所不同,如XML配置文件使用XML解析器,Java配置文件使用Java解析器等。

4.创建BeanDefinition对象:

根据配置文件的定义,创建一个对应的BeanDefinition对象。每个Bean都由一个BeanDefinition对象表示。BeanDefinition对象包含了Bean的名称、类型、属性等信息。

5.注册Bean定义到容器:

将BeanDefinition对象注册到DI容器中,以便容器可以管理这些Bean。每个Bean定义都有一个唯一的名称,可以通过该名称来获取或注入Bean。容器还可以保存其他关于Bean的信息,如依赖关系、自定义方法等。

6.解析依赖关系:

根据配置文件中的依赖关系,解析并创建相应的依赖关系。这些依赖关系用于描述Bean之间的依赖关系,以便在实例化时注入依赖。解析器会根据依赖关系的类型不同而有所不同,如通过名称解析依赖关系或通过构造函数参数解析依赖关系等。
实例化Bean:使用反射机制实例化每个Bean。根据依赖关系,将需要的依赖注入到Bean中。在这个步骤中,容器会使用IoC的方式自动管理Bean的生命周期。容器还可以根据需要自动调用Bean的自定义方法等。

7.填充Bean属性:

根据配置文件中的属性信息,为每个Bean设置属性值。这些属性值可以通过配置文件或注解等方式进行设置。容器还可以根据需要自动设置属性值或调用自定义的属性填充方法等。

8.执行自定义初始化方法:

在实例化后,执行Bean的自定义初始化方法(如init-method)。这个方法可以在Bean初始化时执行一些自定义的逻辑。容器还可以根据需要自动调用自定义的初始化方法等。

9.执行自定义销毁方法:

在销毁时,执行Bean的自定义销毁方法(如destroy-method)。这个方法可以在Bean销毁时执行一些自定义的逻辑。容器还可以根据需要自动调用自定义的销毁方法等。

三,IOC和DI交互

在这里插入图片描述
1.增加了对配置文件类型的选择,包括XML配置文件、Java配置文件、注解配置文件和其他配置方式。这些配置文件用于定义Bean的属性和依赖关系。在加载配置文件后,解析器会解析配置文件,并将其转换为内部的数据结构,以便后续的处理。解析器会根据配置文件的类型不同而有所不同,如XML解析器用于解析XML配置文件,Java解析器用于解析Java配置文件等。解析器将解析后的信息注册到IoC容器中,以便容器可以管理这些Bean。容器会根据注册的Bean定义创建对应的Bean实例,并自动管理其生命周期。在实例化Bean后,容器会自动注入需要的依赖,并自动调用自定义的初始化方法和销毁方法等。最后,容器将Bean实例保存到容器中,以便后续使用。在需要使用Bean时,容器可以通过名称或其他方式获取Bean实例,并使用它们来完成各种任务。在使用Bean时,可以调用它们的各种方法,包括自定义的方法和注入的依赖等方法。

以下是关于Spring IOC和DI如何交互的流程图总结:

Spring IoC容器是用于管理Bean的容器,通过加载配置文件来注册Bean定义,并根据依赖关系实例化Bean,自动管理其生命周期。
配置文件用于定义Bean的属性和依赖关系,包括XML配置文件、Java配置文件、注解配置文件和其他配置方式。
在容器初始化时,会创建ApplicationContext对象,并加载BeanDefinition对象。ApplicationContext是IoC容器的高级接口,提供了更多的功能,如自动装配和自定义生命周期方法等。
在实例化Bean后,容器会自动注入需要的依赖,并自动调用自定义的初始化方法和销毁方法等。
容器将Bean实例保存到容器中,以便后续使用。在需要使用Bean时,可以通过容器获取Bean实例,并使用它们来完成各种任务。
通过流程图可以更详细地了解Spring IOC和DI如何交互的过程,包括加载配置文件、解析配置文件、创建BeanDefinition对象、注册Bean定义、解析依赖关系、实例化Bean、填充Bean属性、执行自定义初始化方法和销毁方法等步骤。

四,面试官一般会问讲讲什么ioc和di

IOC和DI是Spring框架中的重要概念,用于实现对象的解耦。IOC是一种设计思想,即控制反转。它的核心是将对象的创建和管理权利从应用程序代码中转移到一个容器或框架中。传统的开发方式是由应用程序代码直接控制和实例化对象,而控制反转则是由框架控制对象的创建、管理、组装和调用,应用程序代码只需通过接口或抽象类来间接使用对象,实现了对象的解耦。DI是IOC思想的具体实现方式之一,即依赖注入。它通过在对象创建时将对象所依赖的其他对象注入进来,实现了对象之间的松耦合。依赖注入的实现方式可以通过构造函数、setter方法或接口注入实现。通过依赖注入,对象不再负责创建或管理它所依赖的其他对象,而是通过IOC容器进行管理。因此,可以解释为IOC是一种设计思想,通过控制反转将对象的创建和管理权利交给框架,实现对象的解耦;而DI则是实现IOC思想的具体实现方式之一,通过依赖注入的方式实现对象之间的解耦。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

『Jmeter超级干货』| Linux下Jmeter安装配置、脚本设计执行、监控及报告完整过程

『Jmeter超级干货』| Linux下Jmeter安装配置、脚本设计执行、监控及报告完整过程 1 JDK安装部署1.1 JDK下载1.2 JDK配置 2 Jmeter安装部署2.1 Jmeter下载2.2 Jmeter安装2.3 Jmeter相关目录配置2.4 Jmeter启动配置2.5 检查并启动 3 Jmeter汉化3.1 临时修改3.2 永久修改 4 准备测…

快照读通过MVCC解决不可重复读当前读通过间隙锁解决幻读

简介 Multi-Version Concurrency Control 多版本并发控制,MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问;在编程语言中实现事务内存。 *往期知识不做重点 事务具有4个特征,分别是原子性、一致性、隔…

毕设:《基于hive的音乐数据分析系统的设计与实现》

文章目录 环境启动一、爬取数据1.1、歌单信息1.2、每首歌前20条评论1.3、排行榜 二、搭建环境1.1、搭建JAVA1.2、配置hadoop1.3、配置Hadoop环境:YARN1.4、MYSQL1.5、HIVE(数据仓库)1.6、Sqoop(关系数据库数据迁移) 三、hadoop配置内存四、导…

用 PHP和html做一个简单的注册页面

用 PHP和html做一个简单的注册页面 index.html的设计 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title…

【Proteus】绘制简单的电路图

参考书籍&#xff1a;微机原理与接口技术——基于8086和Proteus仿真&#xff08;第3版&#xff09;&#xff08;作者&#xff1a;顾晖等&#xff09;&#xff0c;p111 1.放置元件 以8086为例&#xff1a; 确保处于元件模式&#xff0c;点击对应的按钮&#xff1a; 在元件库中…

【离散数学】——期末刷题题库(等价关系与划分)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

邮政单号查询,邮政快递物流查询,并进行提前签收分析

批量查询邮政快递单号的物流信息&#xff0c;并将提前签收件分析筛选出来。 所需工具&#xff1a; 一个【快递批量查询高手】软件 邮政快递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;第一次使用的朋友记得先注册&#xff0c…

JAVA全栈开发 MySql详解

一、数据库 1.数据储存在哪里&#xff1f; 硬盘、网盘、U盘、光盘、内存&#xff08;临时存储&#xff09; 数据持久化 使用文件来进行存储&#xff0c;数据库也是一种文件&#xff0c;像excel &#xff0c;xml 这些都可以进行数据的存储&#xff0c;但大量数据操作&#x…

商家门店小程序怎么做?门店小程序的优势和好处

生活服务类商家在当前数字化时代&#xff0c;越来越认识到门店小程序的重要性。门店小程序不仅为商家提供了一个在线展示的窗口&#xff0c;更为其打造了一个与消费者直接互动的平台。有了门店小程序&#xff0c;商家可以更加便捷地管理商品信息、订单流程&#xff0c;同时还能…

网络机房的功能有哪些?

网络机房的功能主要包括&#xff1a; 信息存储和管理&#xff1a;机房作为信息系统的核心&#xff0c;需要提供可靠的存储和管理能力&#xff0c;包括服务器、存储设备、备份系统等硬件设备&#xff0c;以及数据备份、数据迁移、容灾等管理方法和技术。网络连接和通信&#xf…

北京市经信局局长姜广智带队调研三六零 强调大模型应与行业结合

12月6日&#xff0c;北京市经济和信息化局局长姜广智、副局长王磊带队走访调研三六零集团&#xff0c;就共促城市级数字安全基础设施项目落地&#xff0c;打造引领行业发展标杆项目&#xff0c;推动大模型落地应用赋能产业、行业发展等话题进行交流。360集团创始人周鸿祎接待来…

【数据结构】二叉树---C语言版

二叉树 一、树的概念及结构1.树的概念2.树的相关概念3.树的表示4.树在实际中的应用 二、二叉树的概念及结构1.二叉树的概念2.满二叉树3.完全二叉树4.二叉树的性质5.二叉树的储存结构 三、二叉树的遍历1.前序遍历2.中序遍历3.后序遍历4.层序遍历 四、手撕二叉树&#xff08;务必…

Linux-代码实现通过system v共享内存实现的进程间的通信

一.makefile编写 .PHONY:all all:processa processbprocessa : processa.ccg -o $ $^ -g -stdc11 processb : processb.ccg -o $ $^ -g -stdc11.PHONY:clean clean:rm -rf processa processb 二.创建system v共享内存 1.系统调用接口 key&#xff1a;a.key是一个数值…

【Java系列】函数式接口编程

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

数据结构之栈

作者简介&#xff1a; zoro-1&#xff0c;目前大二&#xff0c;正在学习Java&#xff0c;数据结构等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; 数据结构之栈 概念特性常用方法栈模拟实现接口实现…

OSHI-操作系统和硬件信息库

文章目录 引言一、快速入门1.1 OSHI的简介1.2 引入依赖1.3 涉及的包&#xff08;package&#xff09;1.4 涉及的核心类 二、操作系统信息&#xff1a;OperatingSystem2.1 总揽2.2 文件系统信息&#xff1a;FileSystem2.3 网络参数信息&#xff1a;NetworkParams2.4 进程信息&am…

C++ 函数详解

目录 函数概述 函数的分类 函数的参数 函数的调用 函数的嵌套调用 函数的链式访问 函数声明和定义 函数递归 函数概述 函数——具有某种功能的代码块。 一个程序中我们经常会用到某种功能&#xff0c;如两数相加&#xff0c;如果每次都在需要用到时实现&#xff0c;那…

状态机的练习:按键控制led灯

设计思路&#xff1a; 三个按键控制led输出。 三个按键经过滤波(消抖)&#xff0c;产生三个按键标志信号。 三个led数据的产生模块&#xff08;流水&#xff0c;跑马&#xff0c;闪烁模块&#xff09;&#xff0c;分别产生led信号。 这六路信号&#xff08;三路按键信号&am…

LAMP部署

一.什么是LAMP&#xff1f; LAMP架构是企业网站应用模式之一&#xff0c;包括linux系统&#xff0c;apache网站服务&#xff0c;mysql数据库服务器&#xff0c;php&#xff08;python&#xff09;网页编程语言。 linux&#xff08;平台&#xff09;&#xff1a;作为LAMP架构的…

西南科技大学模拟电子技术实验六(BJT电压串联负反馈放大电路)预习报告

一、计算/设计过程 BJT电压串联负反馈放大电路图1-1-1-1为BJT电压串联负反馈放大实验电路,若需稳定输出电压,减小从信号源所取电流,可引入电压串联负反馈闭合开关。 图1-1-1-1 理论算法公式(1)闭环电压放大倍数 (2)反馈系数 (3)输入电阻 (4)输出电阻 计算过程。开环…