【Spring】Spring的IOC(控制反转)/DI(依赖注入)原理(二):模拟Spring加载配置文件

框架面试题06控制反转(IOC)和依赖注入(DI)原理 本文深入解析Spring框架的核心设计思想——控制反转(IoC)和依赖注入(DI)。IoC将对象创建权交给容器,实现控制权反转;DI通过反射动态注入依赖,解决代码耦合问题。文章详细剖析了IoC容器的实现原理,包括组件扫描、Bean定义、依赖分析和实例化流程,并通过三级缓存机制解决循环依赖。对比了三种依赖注入方式的优缺点,强调构造器注入的优势。最终指出IoC/DI的核心价值在于实现解耦设计,提升代码可维护性和可测试性,是现代框架的基石。理解这些思想对掌握任何语言和框架都至关重要。 阅读详情

IOC(DI):其实这个Spring架构核心的概念没有这么复杂,更不像有些书上描述的那样晦涩。java程序员都知道:java程序中的每个业务逻辑至少需要两个或以上的对象来协作完成,通常,每个对象在使用他的合作对象时,自己均要使用像new object() 这样的语法来完成合作对象的申请工作。你会发现:对象间的耦合度高了。而IOC的思想是:Spring容器来实现这些相互依赖对象的创建、协调工作。对象只需要关系业务逻辑本身就可以了。从这方面来说,对象如何得到他的协作对象的责任被反转了(IOC、DI)。

这是我对Spring的IOC的体会。DI其实就是IOC的另外一种说法。DI是由Martin Fowler 在2004年初的一篇论文中首次提出的。他总结:控制的什么被反转了?就是:获得依赖对象的方式反转了。

如果对这一核心概念还不理解:这里引用一个叫Bromon的blog上找到的浅显易懂的答案:

IoC与DI

  首先想说说IoC(Inversion of Control,控制倒转)。这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。这是什么意思呢,举个简单的例子,我们是如何找女朋友的?常见的情况是,我们到处去看哪里有长得漂亮身材又好的mm,然后打听她们的兴趣爱好、qq号、电话号、ip号、iq号………,想办法认识她们,投其所好送其所要,然后嘿嘿……这个过程是复杂深奥的,我们必须自己设计和面对每个环节。传统的程序开发也是如此,在一个对象中,如果要使用另外的对象,就必须得到它(自己new一个,或者从JNDI中查询一个),使用完之后还要将对象销毁(比如Connection等),对象始终会和其他的接口或类藕合起来。

  那么IoC是如何做的呢?有点像通过婚介找女朋友,在我和女朋友之间引入了一个第三者:婚姻介绍所。婚介管理了很多男男女女的资料,我可以向婚介提出一个列表,告诉它我想找个什么样的女朋友,比如长得像李嘉欣,身材像林熙雷,唱歌像周杰伦,速度像卡洛斯,技术像齐达内之类的,然后婚介就会按照我们的要求,提供一个mm,我们只需要去和她谈恋爱、结婚就行了。简单明了,如果婚介给我们的人选不符合要求,我们就会抛出异常。整个过程不再由我自己控制,而是有婚介这样一个类似容器的机构来控制。Spring所倡导的开发方式就是如此,所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。如果你还不明白的话,我决定放弃。

IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了 spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖 Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。那么DI是如何实现的呢? Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。关于反射的相关资料请查阅java doc。
 理解了IoC和DI的概念后,一切都将变得简单明了,剩下的工作只是在spring的框架中堆积木而已。

如果还不明白,放弃java吧!

 

下面来让大家了解一下Spring到底是怎么运行的。

Java代码 
  1. public static void main(String[] args) {   
  2.         ApplicationContext context = new FileSystemXmlApplicationContext(   
  3.                 "applicationContext.xml");   
  4.         Animal animal = (Animal) context.getBean("animal");   
  5.         animal.say();   
  6.     }  

这段代码你一定很熟悉吧,不过还是让我们分析一下它吧,首先是applicationContext.xml

Java代码 
  1. <bean id="animal" class="phz.springframework.test.Cat">   
  2.         <property name="name" value="kitty" />   
  3.     </bean>  

他有一个类phz.springframework.test.Cat
Java代码 
  1. public class Cat implements Animal {   
  2.     private String name;   
  3.     public void say() {   
  4.         System.out.println("I am " + name + "!");   
  5.     }   
  6.     public void setName(String name) {   
  7.         this.name = name;   
  8.     }   
  9. }  

实现了phz.springframework.test.Animal接口

Java代码 
  1. public interface Animal {   
  2.     public void say();   
  3. }  

很明显上面的代码输出I am kitty! 

那么到底Spring是如何做到的呢? 
接下来就让我们自己写个Spring 来看看Spring 到底是怎么运行的吧! 

首先,我们定义一个Bean类,这个类用来存放一个Bean拥有的属性

Java代码 
  1. /* Bean Id */  
  2.     private String id;   
  3.     /* Bean Class */  
  4.     private String type;   
  5.     /* Bean Property */  
  6.     private Map<String, Object> properties = new HashMap<String, Object>();  

一个Bean包括id,type,和Properties。 

接下来Spring 就开始加载我们的配置文件了,将我们配置的信息保存在一个HashMap中,HashMap的key就是Bean 的 Id ,HasMap 的value是这个Bean,只有这样我们才能通过context.getBean("animal")这个方法获得Animal这个类。我们都知道Spirng可以注入基本类型,而且可以注入像List,Map这样的类型,接下来就让我们以Map为例看看Spring是怎么保存的吧 

Map配置可以像下面的

Java代码 
  1. <bean id="test" class="Test">   
  2.         <property name="testMap">   
  3.             <map>   
  4.                 <entry key="a">   
  5.                     <value>1</value>   
  6.                 </entry>   
  7.                 <entry key="b">   
  8.                     <value>2</value>   
  9.                 </entry>   
  10.             </map>   
  11.         </property>   
  12.     </bean>  

Spring是怎样保存上面的配置呢?,代码如下:

Java代码 
  1. if (beanProperty.element("map") != null) {   
  2.                     Map<String, Object> propertiesMap = new HashMap<String, Object>();   
  3.                     Element propertiesListMap = (Element) beanProperty   
  4.                             .elements().get(0);   
  5.                     Iterator<?> propertiesIterator = propertiesListMap   
  6.                             .elements().iterator();   
  7.                     while (propertiesIterator.hasNext()) {   
  8.                         Element vet = (Element) propertiesIterator.next();   
  9.                         if (vet.getName().equals("entry")) {   
  10.                             String key = vet.attributeValue("key");   
  11.                             Iterator<?> valuesIterator = vet.elements()   
  12.                                     .iterator();   
  13.                             while (valuesIterator.hasNext()) {   
  14.                                 Element value = (Element) valuesIterator.next();   
  15.                                 if (value.getName().equals("value")) {   
  16.                                     propertiesMap.put(key, value.getText());   
  17.                                 }   
  18.                                 if (value.getName().equals("ref")) {   
  19.                                     propertiesMap.put(key, new String[] { value   
  20.                                             .attributeValue("bean") });   
  21.                                 }   
  22.                             }   
  23.                         }   
  24.                     }   
  25.                     bean.getProperties().put(name, propertiesMap);   
  26.                 }  

接下来就进入最核心部分了,让我们看看Spring 到底是怎么依赖注入的吧,其实依赖注入的思想也很简单,它是通过反射机制实现的,在实例化一个类时,它通过反射调用类中set方法将事先保存在HashMap中的类属性注入到类中。让我们看看具体它是怎么做的吧。 
首先实例化一个类,像这样

Java代码 
  1. public static Object newInstance(String className) {   
  2.         Class<?> cls = null;   
  3.         Object obj = null;   
  4.         try {   
  5.             cls = Class.forName(className);   
  6.             obj = cls.newInstance();   
  7.         } catch (ClassNotFoundException e) {   
  8.             throw new RuntimeException(e);   
  9.         } catch (InstantiationException e) {   
  10.             throw new RuntimeException(e);   
  11.         } catch (IllegalAccessException e) {   
  12.             throw new RuntimeException(e);   
  13.         }   
  14.         return obj;   
  15.     }  

接着它将这个类的依赖注入进去,像这样

Java代码 
  1. public static void setProperty(Object obj, String name, String value) {   
  2.         Class<? extends Object> clazz = obj.getClass();   
  3.         try {   
  4.             String methodName = returnSetMthodName(name);   
  5.             Method[] ms = clazz.getMethods();   
  6.             for (Method m : ms) {   
  7.                 if (m.getName().equals(methodName)) {   
  8.                     if (m.getParameterTypes().length == 1) {   
  9.                         Class<?> clazzParameterType = m.getParameterTypes()[0];   
  10.                         setFieldValue(clazzParameterType.getName(), value, m,   
  11.                                 obj);   
  12.                         break;   
  13.                     }   
  14.                 }   
  15.             }   
  16.         } catch (SecurityException e) {   
  17.             throw new RuntimeException(e);   
  18.         } catch (IllegalArgumentException e) {   
  19.             throw new RuntimeException(e);   
  20.         } catch (IllegalAccessException e) {   
  21.             throw new RuntimeException(e);   
  22.         } catch (InvocationTargetException e) {   
  23.             throw new RuntimeException(e);   
  24.         }   
  25. } 


最后它将这个类的实例返回给我们,我们就可以用了。我们还是以Map为例看看它是怎么做的,我写的代码里面是创建一个HashMap并把该HashMap注入到需要注入的类中,像这样,

Java代码 
  1. if (value instanceof Map) {   
  2.                 Iterator<?> entryIterator = ((Map<?, ?>) value).entrySet()   
  3.                         .iterator();   
  4.                 Map<String, Object> map = new HashMap<String, Object>();   
  5.                 while (entryIterator.hasNext()) {   
  6.                     Entry<?, ?> entryMap = (Entry<?, ?>) entryIterator.next();   
  7.                     if (entryMap.getValue() instanceof String[]) {   
  8.                         map.put((String) entryMap.getKey(),   
  9.                                 getBean(((String[]) entryMap.getValue())[0]));   
  10.                     }   
  11.                 }   
  12.                 BeanProcesser.setProperty(obj, property, map);   
  13.             }  

好了,这样我们就可以用Spring 给我们创建的类了,是不是也不是很难啊?当然Spring能做到的远不止这些,这个示例程序仅仅提供了Spring最核心的依赖注入功能中的一部分。 
本文参考了大量文章无法一一感谢,在这一起感谢,如果侵犯了你的版权深表歉意,很希望对大家有帮助!

iOS远程真机之WebDriverAgent 天坑记 一、WDA安装依赖报错:       这个东西神坑,我搞了一天都没找到解决方案,最后在appium讨论中发现,       解决方案是:       先定位到WebDriverAgent 所在路径$ cd /Users/XXXX/git/WebDriverAgent        然后运行:mkdir -p Resources/WebDriverAgent.bundle sh ./Scripts/b 阅读详情

相关推荐

5分钟搞定Google Custom Search API申请:从注册到获取CX Key全流程

本文详细介绍了如何快速申请和配置Google Custom Search API,从Google Cloud项目创建、启用计费、获取API Key,到在Programmable Search Engine控制台创建自定义搜索引擎并获取关键的CX Key,提供了全流程实战指南。文章还包含安全配置建议、API调用测试方法及前端与后端的集成代码示例,帮助开发者高效实现网站或应用的智能搜索功能。

weixin_29227585的博客 1666

理解IOC与DI:Spring容器初始化与依赖注入解析

本文探讨了Spring框架中的**IOC(控制反转)和DI(依赖注入)**概念。通过IOC容器管理对象的创建与依赖关系,解耦组件间的联系,提高系统灵活性。DI作为IOC的实现方式,简化了依赖管理,降低了代码耦合度。文章还讲解了Spring容器的初始化过程及依赖注入的实现,帮助开发者更好地理解和应用这些核心特性。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 87万+

别再拍脑袋估工时了!手把手教你用FPA功能点分析法,给软件项目算笔明白账

本文详细介绍了FPA功能点分析法在软件开发工作量评估中的应用,帮助团队告别拍脑袋估算。通过量化系统功能组件,FPA提供客观的工时和成本预估,特别适合需求不明确的项目初期。文章以财务系统为例,拆解FPA计算流程,并分享实用估算模板,助力技术管理者提升项目规划能力。

weixin_42614269的博客 387

Spring入门使用:IOC控制反转与DI依赖注入详解

本文介绍了Spring框架的核心概念IOC(控制反转)和DI(依赖注入)。IOC将对象控制权交给Spring容器,通过XML配置实现对象管理;DI则通过setter或构造方法注入依赖对象。文章详细演示了Spring的配置步骤、Bean属性设置及依赖注入方式,包括单例/多例作用域配置和引用类型的注入。通过示例代码展示了如何利用Spring简化JavaEE开发,实现对象间的解耦和灵活管理。

先做到 再看见 1362

高通平台 5G RF调试总结

目录: 1.QRCT4的使用 2.RFC配置 3.5G CA 配置概括 4.RFPD 运行及错误分析 5.CA吞吐率问题分析

嘿v小米的博客 9679

实战测评:4大搜索API(You.com/Tavily/Exa/Perplexity)谁更适合你的AI项目?附Python调用代码

本文实战测评了You.com、Tavily、Exa和Perplexity四大搜索API在AI项目中的集成应用,详细对比了它们的技术特性和Python调用方法。针对LLM实时数据需求,You.com的优化设计表现突出,支持32k大上下文窗口和快速响应。文章提供了完整的代码示例和场景化选型建议,帮助开发者高效集成搜索API到AI项目中。

weixin_42569329的博客 478

Spring IoC【控制反转】DI【依赖注入】

IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序

很高兴你能看到这里 1820

从BAM到bigWig:用UCSC工具链完成测序数据可视化的完整流程

本文详细介绍了从BAM文件到bigWig格式的基因组数据可视化完整流程,涵盖UCSC工具链配置、文件格式转换、参数优化及常见问题解决方案。通过实战指南帮助研究人员高效完成测序数据可视化,特别适合ChIP-seq和RNA-seq数据分析。

weixin_29309213的博客 707

Java面试-Spring 中的 IoC(控制反转)与 DI(依赖注入)原理

《Java面试200问》系列聚焦Spring核心机制,深入解析IoC与DI原理。文章生动对比传统对象创建方式与Spring容器的优势,系统讲解三种依赖注入方式(构造函数注入、Setter注入、字段注入)的优缺点及适用场景,推荐首选构造函数注入。同时剖析Spring容器的核心组件BeanFactory与ApplicationContext的差异,帮助开发者理解Spring的"控制反转"哲学。通过理论结合实践的方式,为Java开发者提供面试必备的Spring核心知识体系,助力技术成长与面试准

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

JS实例(三)图片的缓慢放大和缩小

  我们经常能看到在一些网站中可以通过按钮实现对图片的放大或者缩小,也有可能是鼠标经过时图片放大。在本例中就是通过JavaScript实现图片的放大和缩小。   首先是进行简单的页面布局 1 <div class="imagedispose"> 2 <img src="1.jpeg" id="imaged" width="400px" height="3...

weixin_34235105的博客 313

华为OD新系统机试真题-勇攀数字高峰(Java/Py/C/C++/Js/Go)

新系统 华为OD机试新系统【勇登数字高峰】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD新系统机试真题【勇登数字高峰】

qq_45776114的博客 1545

SpringBoot解耦:控制反转(IOC)与依赖注入(DI)

本文深入解析了SpringBoot框架中的控制反转(IoC)和依赖注入(DI)机制。通过对比传统硬编码方式和SpringBoot实现方式的代码示例,阐述了IoC将对象创建权交给容器、DI实现松耦合注入的核心思想。文章详细介绍了三种声明Bean的注解(@Component及其衍生注解)、三种依赖注入方式(构造器/属性/Setter方法)以及解决多Bean冲突的三种方案(@Primary/@Qualifier/@Resource)。

大家好,我是张小白! 1916

pycharm下载continue插件接入DeepSeek的API,向其提问输出乱码,如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 2219

Spring IoC & DI:控制反转与依赖注入

IoC & DI

2401_83595513的博客 1897

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

控制反转IOC和依赖注入DI详解

本文介绍了Spring框架中的控制反转IOC和依赖注入DI,欢迎阅读,共同学习,一起进步。 Spring框架基础参考:深入学习Spring基础 文章目录一.入门程序和IOC简介二.IOC-控制反转三.DI-依赖注入四. IOC和DI五.Spring框架使用(IoC)六.注入类型的三种方式 一.入门程序和IOC简介 依赖注入或控制反转的定义中,调用者不负责被调用者的实例创建工作,该工作由S...

末尾卡片和博主交流学习! 2865

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Spring知识点精简版梳理(二)—— IoC与DI

Spring —— IOC(控制反转)与DI(依赖注入) 一、IoC概念和原理 1、什么是IOC(面试) Spring IOC 负责创建对象,管理对象(通过依赖注入(DI),装配对象,配置对象,并且管理这些对象的整个生命周期。 ​使用IOC目的:为了降低耦合度 2、IOC底层(面试) xml解析、工厂模式、反射 ​ 3、IOC 思想基于 IOC 容器完成,IOC 容器底层就是对象工厂,Spring提供的IOC容器实现的两种方式(两个接口)(面试) (1)BeanFactory接口:IOC容器基本实现是Sp

qq_35843514的博客 4641

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【Spring 核心原理】彻底搞懂 IoC 与 DI:控制反转与依赖注入的本质

在 Spring 框架中,控制反转(IoC) 和 依赖注入(DI) 是支撑整个体系的 “灵魂”。对于我们 Java 后端开发者而言,理解它们是入门 Spring 的关键。本文从组件管理的痛点出发,结合原理、代码示例与流程分析,带你直观掌握 IoC/DI 的核心逻辑。v

weixin_73114629的博客 1199

Spring的控制反转(IoC)与依赖注入(DI)详解

一、概念: **控制反转(Inversion of Control,英文缩写为IoC)****:****是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 2020整理收集的一线互联网公司面试真题(都整理成文档),有很多干货,包含netty,spring,线程,spring cloud等详细讲解,也有详细的学习规划图,面试题整理等,我感觉在面试这块讲的非常清楚:获取面试资料只需:点击这里领取!!!暗号:优快云 控制反转一般分为两种类型,依赖注入(Dependen

a3961401的博客 3002

Spring之IoC(控制反转)与DI(依赖注入)

本博客将深入探讨控制反转(IoC)和依赖注入(DI)的概念与原理。我们将讨论如何通过XML和注解配置IoC容器,解释Bean的生命周期和作用域,并提供代码示例和注释。此外,还将强调注意事项,并在最后总结所讨论的内容。IoC的核心思想是将应用的控制权从代码中转移到容器中,以便在需要时动态地创建和管理对象。DI是IoC的实现方式之一,通过注入依赖对象,实现了组件之间的解耦。IoC和DI是现代软件开发中的重要概念,它们通过控制反转和依赖注入实现了程序设计的灵活性和可维护性。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 2万+

二、Spring Framework基础:IoC(控制反转)和DI(依赖注入)

IoC(Inversion of Control,控制反转)是一种设计思想,用于降低代码之间的耦合度。将对象的创建和管理交给框架,而不是由程序员手动创建和管理。在传统的编程中,对象的创建和依赖关系是由程序员手动管理的。// 客户端直接创建服务对象在这个例子中,Client类直接依赖于Service类,这种依赖关系是硬编码的,耦合度很高。如果Service类的实现发生变化,Client类也需要修改。// 服务对象由外部注入在这种模式下,Client类不再直接创建Service。

xiaoqi270620903的专栏 1266

Spring核心概念IOC/DI、IOC容器和Bean原理及实现

Spring核心概念IOC、DI、IOC容器、Bean的原理及实现,具体概念讲解、案例分析,Spring入门必读!

m0_73500410的博客 1363

Spring IOC、DI、AOP原理和实现

(1)Spring IOC原理          IOC的意思是控件反转也就是由容器控制程序之间的关系,把控件权交给了外部容器,之前的写法,由程序代码直接操控,而现在控制权由应用代码中转到了外部容器,控制权的转移是所谓反转。网上有一个很形象的比喻: 我们是如何找女朋友的?常见的情况是,我们到处去看哪里有长得漂亮身材又好的mm,然后打听她们的兴趣爱好、qq号、电话号、ip号、iq号………,想办法

代码如疯 3万+

【Spring】1.Spring中IOC与DI全解析

控制反转(IOC)和依赖注入(DI)是Spring框架的核心概念。IOC通过DI实现,将对象的创建、配置和管理交给Spring容器,降低代码耦合度,提高复用性和可测试性,但可能增加小型项目的复杂性。DI是实现IOC的方法,通过Spring容器自动创建并注入依赖。Spring的IOC和DI主要有三种使用方式:XML配置方式、注解方式和Java配置方式,各有优缺点。

JCoder的博客 1148

深入理解 Spring IoC 与 DI:控制反转与依赖注入解析

在接触 Spring 框架之前,通常我们会在 main 方法或其他业务逻辑中手动 new 对象,然后调用这些对象的方法来完成任务。手动创建对象的方式意味着我们自己掌握了对象的控制权。 然而,在 Spring 中,我们不再直接在代码中手动创建对象,而是将对象的创建、管理、依赖注入等职责交给了 Spring 容器。Spring 框架通过 IoC(控制反转)和 DI(依赖注入)来实现这一点。

weixin_71246590的博客 1380

【Spring】IoC和DI,控制反转,Bean对象的获取方式

IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式

阿华的博客 1571

IOC 和 DI:控制反转与依赖注入的关系

*控制反转(IoC)**是一种设计原则,它将对象的创建和依赖关系的管理从对象本身转移到外部容器。**依赖注入(DI)**是实现IoC的一种具体方式,通过外部容器将依赖关系注入到对象中。在Spring框架中,IoC和DI是通过Spring容器来实现的,可以通过XML配置、Java配置或注解来配置Bean和依赖关系。Spring Boot进一步简化了IoC和DI的配置,提供了自动配置和组件扫描等功能。

xycxycooo的博客 1361
上一篇: 【Spring】Spring的IOC(控制反转)/DI(依赖注入)原理(一):用到“反射”编程
下一篇: 【Spring】Spring的IOC(控制反转)/DI(依赖注入)原理(三):Spring启动加载配置文件源码分析
cangchen
博客等级 码龄18年 108粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值