“依赖” 在百度百科里有两种释义:
1、依靠别人或事物而不能自立或自给。
2、各个事物或现象互为条件而不可分离。
在生活中,“依赖” 这个词我们也经常使用。小孩子在婴幼儿阶段,需要父母/养育者的照顾,小孩依赖父母/养育者。谈恋爱的时候,女方负责撒娇卖萌,男方负责跑腿、端茶、倒水做各种事情,女方依赖男方。结婚以后,女主内男主外,女方负责照顾家庭,男方负责赚钱养家,男女双方互相依赖。
依赖到底是什么意思呢?通过释义和例子,还是不够直白。换个例子看看。
我要喝开水,总不能对着水壶喝,首先要把热水倒入杯子,然后我才能端起杯子喝水。我使用杯子喝水。依赖,换个直白的词就是“使用”(use-a)。工具是被使用的,人也是被使用的,没毛病。
再看一个有关依赖的原则,依赖倒转原则。在上一篇文章中,我们使用领导和员工来比喻依赖倒转原则。在这里再使用孩子和养育者的例子,把依赖倒转原则再诠释一遍。
孩子在婴儿阶段,很多事情你都可以协助他完成。但随着他慢慢长大,比如到了三岁,四岁、五岁,甚至更大,你就不可以再把他当个婴儿了,要适当地放权了。比如吃饭、上厕所、穿鞋、穿衣服等等一些事情,需要他自己来完成,即使刚开始他做得再慢,你也得接受,而作为养育者的你只需要发号命令就可以了。而这时的孩子,就是具体的实现者,而养育者则是接口。
举个例子,吃饭时间到了,你对着客厅正在玩耍的他喊了一声,吃饭了。他听到你的招呼后,跑到饭桌前坐下,自己拿起碗筷吃饭,怎么把饭吃到嘴里则是他自己的事情。这就是依赖倒转原则。该放手就放手,孩子做一件事情的过程,就是一个人成长的过程,不可继续依赖,你也不能让他依赖一辈子。
最后再看下和依赖相关的依赖注入。
所谓依赖注入,个人认为就是依赖者和被依赖者的衔接方式。
Spring依赖注入主要有三种方式:
1.通过构造器注入,Spring官方推荐的方式;
/**
* 定义一个人的类
* @author 程就人生
* @Date
*/
public class Person {
// 喝水容器
private IContainer container;
/**
* 1.构造器注入
* @param container
*/
public Person(IContainer container){
this.setContainer(container);
}
}
特点:
对象初始化完成后,就可获得可使用的对象;
可以检测到循环对象;
注入对象很多的情况下,构造参数列表会很长,不灵活。
2.通过setter方法注入;
/**
* 定义一个人的类
* @author 程就人生
* @Date
*/
public class Person {
// 喝水容器
private IContainer container;
/**
* 2.通过setter方法注入
* @param container
*/
public void setContainer(IContainer container) {
this.container = container;
}
}
特点:
可以确保在注入前不依赖Spring容器;
每个set方法单独注入一个对象,灵活控制,可以选择性注入;
可以检测到循环对象。
3.通过filed属性注入,通过@Autowired 、 @Resource 注解;
/**
* 定义一个人的类
* @author 程就人生
* @Date
*/
public class Person {
/**
* 3.通过field属性注入
*/
@Autowired
private IContainer container1;
}
特点:
对外部对象可见;
无法检测循环依赖;
如被final修饰无法赋值。
以上便是我的理解和整理,希望对你有帮助。
网友评论