此系列文章为本人对《Effective Java》一书的学习笔记,主要是记录对书中重点内容的理解。
既然有缘看到此文,那么希望能对你有所帮助。
本文对应原书第5条 优先考虑依赖注入来引入资源
什么是引用资源
很简单,当你的类中需要某一个基础的类,使用其功能以构造自己的功能,比如,要准备一个检查外语拼写的类,你就需要在这个类中引用一个基础的资源 – 字典,于是你写了这样一个类:
public class SpellChecker {
// 引用了一个英文词典
private static final Dict dictionary = new EnglishDict();
// 对外提供检查拼写的方法
public static boolean check(String word) { ... }
...
}
这样的写法并没有什么错误,但局限性很大,因为这个类只提供了一个英文词典,当你需要多语言进行检查的时候,这个类就无法正常完成任务。
当然,你也可以强行将dictionary
设置为非final
,然后增加一个方法来对其进行修改,但这样看起来十分笨拙而且容易出错。
什么是依赖注入
依赖注入,dependence injection
,因为spring
已经家喻户晓,所以相信这个名词听起来不会陌生,但其实所表达的意思非常简单,就是把需要的资源(依赖)传入类中。
你可以通过构造器或者setter方法去完成注入,这里举个构造器的例子:
public class SpellChecker {
// 还是一个词典,但具体引用哪个,没确定
private static final Dict dictionary;
// 在实例化时,传入所需要的字典
public SpellChecker(Dict dictionary) {
this.dictionary = dictionary;
}
// 对外提供检查拼写的方法
public static boolean check(String word) { ... }
...
}
就是这么简单,相信很多人都知道这样去写,但是并不了解它依赖注入
这个大名。
当然,依赖注入虽好,也不能贪杯哦,它可以大幅度提升代码的灵活性和测试性,但是也会导致大型项目凌乱不堪,因为大项目的依赖数量实在太多了,但是不要慌,这种凌乱我们可以寻求无敌
spring
的帮助,对于站在云端的他来说,这正是最擅长的活。
总结
简而言之,记住依赖注入
这个名,引用资源的话优先使用他,当然如果你是一个spring
使用者,相信依赖注入
早已在你的灵魂之中了。
水平有限,若文章中存在错误,恳请不吝赐教,这对我以及后面的读者都有重要意义;
若文章能够帮助到你,还望一键三连,你的支持,是我最大的动力。