问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

讲讲什么是依赖注入以及给我们的项目开发带来了什么好处

发布网友 发布时间:2022-04-06 00:48

我来回答

2个回答

热心网友 时间:2022-04-06 02:18

  依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在 传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者 实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。

  不管是依赖注入,还是控制反转,都说明Spring采用动态、灵活的方式来管理各种对象。对象与对象之间的具体实现互相透明。在理解依赖注入之前,看如下这个问题在各种社会形态里如何解决:一个人(Java实例,调用者)需要一把斧子(Java实例,被调用者)。

(1)原始社会里,几乎没有社会分工。需要斧子的人(调用者)只能自己去磨一把斧子(被调用者)。对应的情形为:Java程序里的调用者自己创建被调用者。

(2)进入工业社会,工厂出现。斧子不再由普通人完成,而在工厂里被生产出来,此时需要斧子的人(调用者)找到工厂,购买斧子,无须关心斧子的制造过程。对应Java程序的简单工厂的设计模式。

(3)进入“按需分配”社会,需要斧子的人不需要找到工厂,坐在家里发出一个简单指令:需要斧子。斧子就自然出现在他面前。对应Spring的依赖注入。

第一种情况下,Java实例的调用者创建被调用的Java实例,必然要求被调用的Java类出现在调用者的代码里。无法实现二者之间的松耦合。

第二种情况下,调用者无须关心被调用者具体实现过程,只需要找到符合某种标准(接口)的实例,即可使用。此时调用的代码面向接口编程,可以让调用者和被调用者解耦,这也是工厂模式大量使用的原因。但调用者需要自己定位工厂,调用者与特定工厂耦合在一起。

第三种情况下,调用者无须自己定位工厂,程序运行到需要被调用者时,系统自动提供被调用者实例。事实上,调用者和被调用者都处于Spring的管理下,二者之间的依赖关系由Spring提供。

热心网友 时间:2022-04-06 03:36

依赖注入就是控制反转
控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题。 控制反转还有一个名字叫做依赖注入(Dependency Injection)。简称DI。
依赖注入:组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。容器全权负责的组件的装配,它会把符合依赖关系的对象通过JavaBean属性或者构造函数传递给需要的对象。通过JavaBean属性注射依赖关系的做法称为设值方法注入(Setter Injection);将依赖关系作为构造函数参数传入的做法称为构造子注入(Constructor Injection)

 IoC最大的好处是什么?因为把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变成很简单(一般这样的对象都是实现于某种接口的),只要修改XML就可以了,这样我们甚至可以实现对象的热插拨(有点象USB接口和SCIS硬盘了)。

优缺点:

  IoC最大的缺点是什么?(1)生成一个对象的步骤变复杂了(其实上操作上还是挺简单的),对于不习惯这种方式的人,会觉得有些别扭和不直观。(2)对象生成因为是使用反射编程,在效率上有些损耗。但相对于IoC提高的维护性和灵活性来说,这点损耗是微不足道的,除非某对象的生成对效率要求特别高。(3)缺少IDE重构操作的支持,如果在Eclipse要对类改名,那么你还需要去XML文件里手工去改了,这似乎是所有XML方式的缺憾所在。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么电脑上的word界面变小为什么WORD里面的页面变的很小怎么设置回来... AHA拯救心脏救命术(Basic Life Support,BLS) 基础生命的基本顺序 机械制图第一视角与第三视角的区别 明日之后野外感染者据点都在什么地方 感染就聚集点位置分享 明日之后 明日之后哪些地图有强力感染者? 《明日之后》野外感染者据点一览 明日之后野外感染者据点去哪找 妙洁提醒你注意:保鲜膜有些不能加热 有些不能包肉 C盘里文件的修改日期是不是就代表那天我用过电脑,我是上午用的,可文件... spring 的ioc怎么控制反转依赖注入 Hibernate控制反转和依赖注入如何理解?请用自己的话说,还有项目流程如何讲解 反射是实现控制反转和依赖注入的根本基础,对吗 Spring,依赖注入,控制反转有什么用的问 spring的依赖注入和控制反转 没有spring怎么实现控制反转和依赖注入管理 spring依赖注入,和控制反转。用自己的话说是怎么说的。最好能够用代码来解释 PHP开发指南如何实现理解依赖注入容器 一个关于Spring,依赖注入,控制反转有什么用 Spring中控制反转(IoC)/依赖注入(DI)说的是一回事吗?只是名字不同?新出的Spring3里是哪一个? 依赖注入和控制反转是一个意思吗 什么是spring的控制反转与依赖注入 控制反转和依赖注入的区别是什么? 控制反转和依赖注入的区别 thinkphp能开发大型网站吗? 常规架设THINKPHP是什么意思 thinkphp怎么做才是安全的sql防注入 thinkphp3.2.3 修改怎么写 thinkphp 反序列化有什么用 是不是thinkphp的数据缓存机制和mysql的冲突 如何用最简单的方式解释依赖注入?依赖注入是如何实现解耦的 php 注册树模式到底有什么好处 thinkphp 什么是树形结构 Thinkphp框架如何实现 页面左侧是树形菜单,右侧显示点击树形菜单的响应结果。 thinkphp3.1.3升级thinkphp3.2.3问题 thinkphp 组件化模式 是什么模式? thinkphp cli模式下怎么调用 thinkphp 命令行模式执行,如何才能执行数据库的操作? thinkphp3.2 自定义模板路径 thinkphp 如何自定义模板路径?比如display($template); thinkphp3.2 怎么配置访问admin就可以访问后台 thinkphp配置数据库是在哪个目录 thinkphp3.2 怎么修改url的模式 thinkphp 怎么加载根目录配置文件 ThinkPHP 后台Admin模块路由和URL重写问题 thinkphp怎么加入adminer php中连接数据库,使用单例模式遇到的问题 thinkPHP设置单例模式的类文件是哪个 thinkphp怎么开启调试模式 thinkphp URL常用模式 thinkphp 多入口怎么写公共方法