什么是依赖?
1、从大的方向上讲,比如A系统需要B系统的协助才能完成某项功能,比如购物系统需要依赖支付系统才能完成购物
2、从类的层次上来说,就是A类需要调用B类的方法或熟悉来完成一定的功能,比如实例化一个Human class,需要一个Hand class
那么我们就说Human 依赖于 Hand
那系统是否可以避免依赖呢?
1、答案是否定的,万事万物皆有联系,联系就是依赖,孤岛是完成不了任何功能的,也创造不出任何价值。
看一下常见的处理依赖的方式,需要什么就创建什么:
比如人需要手:
public class Human {我们会在 Human里面直接new一个Hand对象
private Hand hand;
public Human() {
this.hand = new Hand();
}
}
这样做是否可以呢?当然是可以的,但是就是有点不灵活,简单明了的就是,new出来的Hand类都是一模一样的,
比如我想创建一个有六个手指的手就必须修改Human类,给Hand传入一个参数进来,每次如果需要创建一个不同的手,
都需要修改Human类,非常的麻烦。
为什么需要依赖注入?
1、能不能解决上述问题呢?我们看到如果我们不在Human类的内部创建这个Hand对象就没有问题,那么这个Hand对象
从哪里来呢?既然内部不行,那么我们就把眼光放到外部,看看通过外部设置这个对象是否OK?
2、解决问题的方式就是通过外部对依赖就行注入,从而维护对象间的依赖关系。
依赖注入的方式?
1、set注入:
通过设置属性的set方法对这个属性进行注入
public class Human {2、构造器注入:
private Hand hand;
public void setHand(Hand hand) {
this.hand = hand;
}
public Human() {
this.hand = new Hand();
}
}
通过在创建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();
}
}