java依赖注入理解

原创 2015年04月23日 16:45:08

1. 依赖

如果在 Class A 中,有 Class B 的实例,则称 Class A 对 Class B 有一个依赖。例如下面类 Human 中用到一个 Father 对象,我们就说类 Human 对类 Father 有一个依赖。

public class Human {
    ...
    Father father;
    ...
    public Human() {
        father = new Father();
    }
}

仔细看这段代码我们会发现存在一些问题:
(1). 如果现在要改变 father 生成方式,如需要用new Father(String name)初始化 father,需要修改 Human 代码;
(2). 如果想测试不同 Father 对象对 Human 的影响很困难,因为 father 的初始化被写死在了 Human 的构造函数中;
(3). 如果new Father()过程非常缓慢,单测时我们希望用已经初始化好的 father 对象 Mock 掉这个过程也很困难。

2. 依赖注入

上面将依赖在构造函数中直接初始化是一种 Hard init 方式,弊端在于两个类不够独立,不方便测试。我们还有另外一种 Init 方式,如下:

public class Human {
    ...
    Father father;
    ...
    public Human(Father father) {
        this.father = father;
    }
}

上面代码中,我们将 father 对象作为构造函数的一个参数传入。在调用 Human 的构造方法之前外部就已经初始化好了 Father 对象。像这种非自己主动初始化依赖,而通过外部来传入依赖的方式,我们就称为依赖注入。
现在我们发现上面 1 中存在的两个问题都很好解决了,简单的说依赖注入主要有两个好处:
(1). 解耦,将依赖之间解耦。
(2). 因为已经解耦,所以方便做单元测试.

如何通俗的理解java的依赖注入!

假设你编写了两个类,一个是人(Person),一个是手机(Mobile)。 人有时候需要用手机打电话,需要用到手机的callUp方法。 传统的写法是这样: Java code public ...
  • zhangqun23
  • zhangqun23
  • 2016-05-16 14:40:46
  • 1060

对依赖注入的理解

依赖注入的理解
  • a910626
  • a910626
  • 2016-06-10 11:58:49
  • 601

java依赖注入理解

1. 依赖 如果在 Class A 中,有 Class B 的实例,则称 Class A 对 Class B 有一个依赖。例如下面类 Human 中用到一个 Father 对象,我们就说类 Hu...
  • junjianzhang
  • junjianzhang
  • 2015-04-23 16:45:08
  • 357

spring的依赖注入理解

Java代码       Sping  框架的核心就是IOC控制反转和DI依赖注入,并通过这两方面实现松耦合。      (1) 使用Ioc,对象是被动的接受依赖类,而不是自己主动去...
  • Frimish
  • Frimish
  • 2015-10-21 14:02:37
  • 547

对Spring框架思想中依赖注入的理解

最近看了spring框架,相信大家都不陌生。看到Spring,它就马上介绍了依赖注入这个思想。 看完这个介绍后,我感觉自己并没有很理解她。 下面就简单介绍一下书中给的解释: 在依赖注入的模式下,创...
  • u011730199
  • u011730199
  • 2015-08-11 10:58:55
  • 1479

spring的依赖注入怎么理解

http://zhidao.baidu.com/question/399874366.html?fr=qrl&index=4&qbl=topic_question_4&word=%D2%C0%C0%B...
  • a1049107922
  • a1049107922
  • 2016-09-03 11:38:13
  • 1281

【Spring】Spring依赖注入与控制反转理解

Spring是一个庞大的框架,封装了很多成熟的功能,能够让我们无需重复造轮子;其次,它使用IOC进行依赖管理,利用JAVA的反射机制,将实例的初始化交给Spring,Spring可以通过配置文件管理实...
  • jianyuerensheng
  • jianyuerensheng
  • 2016-03-09 17:35:26
  • 6224

深入浅出理解依赖注入

容器,字面上理解就是装东西的东西。常见的变量、对象属性等都可以算是容器。一个容器能够装什么,全部取决于你对该容器的定义。当然,有这样一种容器,它存放的不是文本、数值,而是对象、对象的描述(类、接口)或...
  • forLightWay
  • forLightWay
  • 2017-02-23 17:27:05
  • 4543

如何理解AngularJS中的依赖注入

AngularJS最容易引起混淆的特性之一就是依赖注入(DI)。可能很难理解到底什么是依赖注入,它如何工作,以及为什么它是有用的。     先从理解依赖注入打算要解决的问题开始。一个AngularJ...
  • ghostlpx
  • ghostlpx
  • 2016-10-07 19:31:06
  • 1095

10分钟快速理解依赖注入

看到网络上很多“依赖注入”解释的话题,这篇博客呢也只是我自己的观点,如果你有不同的观点请拍砖,不用客气。 业务场景 小明要去旅游,但是还未确定以什么方式出游,有可能是徒步旅行,也有可能是自驾游。 代...
  • ylhalo
  • ylhalo
  • 2017-05-27 09:26:39
  • 901
收藏助手
不良信息举报
您举报文章:java依赖注入理解
举报原因:
原因补充:

(最多只允许输入30个字)