依赖注入

来源:互联网 发布:p2p网络投资产品排行 编辑:程序博客网 时间:2024/05/17 05:04
什么是依赖?

1、从大的方向上讲,比如A系统需要B系统的协助才能完成某项功能,比如购物系统需要依赖支付系统才能完成购物

2、从类的层次上来说,就是A类需要调用B类的方法或熟悉来完成一定的功能,比如实例化一个Human class,需要一个Hand class
那么我们就说Human 依赖于 Hand


那系统是否可以避免依赖呢?
1、答案是否定的,万事万物皆有联系,联系就是依赖,孤岛是完成不了任何功能的,也创造不出任何价值。

看一下常见的处理依赖的方式,需要什么就创建什么:
比如人需要手:
public class Human {

private Hand hand;

public Human() {
this.hand = new Hand();
}
}
我们会在Human里面直接new一个Hand对象

这样做是否可以呢?当然是可以的,但是就是有点不灵活,简单明了的就是,new出来的Hand类都是一模一样的,

比如我想创建一个有六个手指的手就必须修改Human类,给Hand传入一个参数进来,每次如果需要创建一个不同的手,

都需要修改Human类,非常的麻烦。

为什么需要依赖注入?
1、能不能解决上述问题呢?我们看到如果我们不在Human类的内部创建这个Hand对象就没有问题,那么这个Hand对象
从哪里来呢?既然内部不行,那么我们就把眼光放到外部,看看通过外部设置这个对象是否OK?
2、解决问题的方式就是通过外部对依赖就行注入,从而维护对象间的依赖关系。

依赖注入的方式?

1、set注入:
通过设置属性的set方法对这个属性进行注入
public class Human {

private Hand hand;

public void setHand(Hand hand) {
this.hand = hand;
}

public Human() {
this.hand = new Hand();
}
}
2、构造器注入:
通过在创建Human对象的时候,传入一个Hand对象,然后对其进行赋值,达到维护依赖的方式
public class Human {

private Hand hand;

public Human(Hand hand) {
this.hand = hand;
}

public void setHand(Hand hand) {
this.hand = hand;
}

public Human() {
this.hand = new Hand();
}
}