求问为何要使用依赖注入,使用它有什么好处?

问题描述

求问为何要使用依赖注入,使用它有什么好处?

目前我看到的说法里有如下好处:
1.修改配置文件不需要重启服务器
2.依赖注入不用考虑对象创建

1的话,对于大型服务器来说,确实还不错,不过感觉创建的对象应该不会总是变动
2的话,创建对象无非是为了两种,一个是使用对象的数据结构,二是调用方法。
一的话,既然要使用数据结构的话直接new有何不好?
二的话,直接将类的方法写成静态的不就好了?

不明白使用依赖注入有何好处,求指教

解决方案

第一条,对于类的关联对象的创建,的确可以通过new的方式进行。但是当项目规模过大、对象依赖过多时,我们构建对象时就需要写大量的new的代码,而且还可能出现忘记对某些依赖对象实例化就直接调用对象的方法,那么就会出现空指针异常了。这个过程交给容器管理的话,我们就不用操心对象实例化了,任何时候使用依赖对象都是不会出现空指针异常的,而且能简化代码。
第二条,方法调用过程中使用到的属性可能是实例属性,如果都定义成静态的话,那么方法中用到的数据怎么办呢?实例属性跟类属性还是有区别的,如果像你说的把方法都定义成静态的话,那么方法中引用的类的属性也必须定义成静态的,这就是相当于全局属性了,这样就必定会存在数据同步问题的。
其实想想设计模式中给出的编程原则还是很有道理的,目的都是为了构建可读性高、易于维护和扩展的代码。祝好!

解决方案二:

方便以搭积木的方式来组合软件,方便创建高内聚、低耦合的软件(将依赖关系从代码中抽出)
方便协作开发、方便调试代码(不需要将组件集成在一起,就可以分别测试),创建的代码也更加鲁棒。

解决方案三:

项目开发讲究高内聚,低耦合,使用依赖注入可以避免使用new关键字区创建对象,从而降低了类与类之间的耦合度

时间: 2024-09-13 01:39:15

求问为何要使用依赖注入,使用它有什么好处?的相关文章

Angular 理解module和injector,即依赖注入_AngularJS

依赖注入(DI)的好处不再赘言,使用过spring框架的都知道.angularjs作为前台js框架,也提供了对DI的支持,这是javascript/jquery不具备的特性.angularjs中与DI相关有angular.module().angular.injector(). $injector.$provide.对于一个DI容器来说,必须具备3个要素:服务的注册.依赖关系的声明.对象的获取.比如spring中,服务的注册是通过xml配置文件的<bean>标签或是注解@Repository.

关于依赖注入?不大理解?

问题描述 个人理解:依赖注入最主要的目的就是解耦合,举个例子:比如A类中,需要使用到B类,而B类需要new,但若是在调用A类时,将已经new了的B类传递给A,这就是依赖注入.publicclassA{Bb;publicA(){b=newB();}} ==>publicclassA{Bb;publicA(Bb){this.b=b;}} 那我的疑问就是:1,如果使用抽象和静态,不需要new,不是更方便?2,依赖注入应该是一种设计模式,为什么要使用IoC容器(如Spring.autofac等)?IoC

基于.NET平台的分层架构实战(六)—依赖注入机制及IoC的设计

我们设计的分层架构,层与层之间应该是松散耦合的.因为是单向单一调用, 所以,这里的"松散耦合"实际是指上层类不能具体依赖于下层类, 而应该依赖于下层提供的一个接口.这样,上层类不能直接实例化下层中的类, 而只持有接口,至于接口所指变量最终究竟是哪一个类,则由依赖注入机制决定 . 之所以这样做,是为了实现层与层之间的"可替换"式设计 ,例如,现在需要换一种方式实现数据访问层,只要这个实现遵循了前面定义的 数据访问层接口,业务逻辑层和表示层不需要做任何改动,只需要改一下

深一层看依赖注入

from:http://www.cnblogs.com/weidagang2046/archive/2009/12/10/1620587.html   依赖注入(DI)是控制反转(IoC)的一种方式.目前,在.NET和Java领域已经有相当多基于DI思想的对象容器,如:Spring,Unity等.本文试图避免重复性地介绍DI基础知识和DI容器的使用,而是希望深一层探讨DI的本质和对象间关系,以达到合理设计避免滥用DI的目的.   依赖注入 vs 创建对象 有不少地方这样描述:"依赖注入改变了使用

ios-新人求问一下xcode的使用问题

问题描述 新人求问一下xcode的使用问题 新人一枚刚刚开始学习ios,使用xcode的时候发现几个问题,求大神指点一二 1.在storyboard里面的时候,用触摸板二指移动视图很方便,但是鼠标怎么移动呢?只能点右.下两边的滑条吗?而且下方的滑条好像有时候还不会出来. 2.在storyboard里代码连线的时候,通过触摸板怎么连线么?按住ctrl以后触摸板怎么操作呢(已经开启轻拍来点按了),用三指拖动没效果,只能把触摸板按下去才能连线,但是已经开启了点按了啊,怎么还需要按下去呢? 3.在sto

Laravel 深入理解控制反转(IoC)和依赖注入(DI)

容器,字面上理解就是装东西的东西.常见的变量.对象属性等都可以算是容器.一个容器能够装什么,全部取决于你对该容器的定义.当然,有这样一种容器,它存放的不是文本.数值,而是对象.对象的描述(类.接口)或者是提供对象的回调,通过这种容器,我们得以实现许多高级的功能,其中最常提到的,就是 "解耦" ."依赖注入(DI)".本文就从这里开始. IoC 容器 -- Laravel 的核心 Laravel 的核心就是一个 IoC 容器,根据文档,称其为"服务容器&qu

依赖注入

问题描述 不会用依赖注入,不懂它的应用场景.... 解决方案 解决方案二:你要问什么?spring.net?解决方案三:引用楼主mahongp的回复: 不会用依赖注入,不懂它的应用场景.... 在.net程序开发中,你应该广泛地使用自定义的事件,驱动你的程序的通知流程.进行明确的设计.不要使用侵入性.破坏程序可调试.可维护性的,成事不足百事有余的依赖注入方式.解决方案四:同样属于会用,但对于它的应用场景终归觉得模糊的人前来参拜,一直觉得它就是帮忙实现了工厂而已解决方案五:publicclassP

Angular.JS学习之依赖注入$injector详析_AngularJS

前言 在依赖注入(IoC)之前,我们在程序中需要创建一个对象很简单也很直接,就是在代码中new Object即可,有我们自己负责创建.维护.修改和删除,也就是说,我们控制了对象的整个生命周期,直到对象没有被引用,被回收.诚然,当创建或者维护的对象数量较少时,这种做法无可厚非,但是当一个大项目中需要创建大数量级的对象时,仅仅依靠程序员来进行维护所有对象,这是难以做到的,特别是如果想在程序的整个生命周期内复用一些对象,我们需要自己写一个缓存模块对所有对象进行缓存,这加大了复杂度.当然,IoC的好处并

[Android]使用Dagger 2依赖注入 - 图表创建的性能(翻译)

以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5098943.html 使用Dagger 2依赖注入 - 图表创建的性能 原文:http://frogermcs.github.io/dagger-graph-creation-performance/ #PerfMatters - 最近非常流行标签,尤其在Android世界中.不管怎样,apps只需要正常工作就可以的时代已经过去了.现在所有的一切都应该是令人愉