第一时间关注技术干货!
免责声明~ 任何文章不要过度深思! 万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案」; 不要急着评判文章列出的观点,只需代入其中,适度审视一番自己即可,能「跳脱出来从外人的角度看看现在的自己处在什么样的阶段」才不为俗人。 怎么想、怎么做,全在乎自己「不断实践中寻找适合自己的大道」
1 使用Java的人实在太多
而使用Java的人中绝大多数又使用的Spring,所有学校和培训机构教Java就要教Spring。而 Spring就是依赖注入的集大成者,你只要用Spring就必须使用依赖注入。
2 其他语言没有Spring
类似的具有统治地位的依赖注入框架。Golang或者Cpp里面没有Spring那种IOC容器大杀器。Spring这种框架能够很好的发展,主要来源于Java本身运行期强大的动态能力,特别是反射能力,这是其他静态语言,特别是可以直接编译成native code的语言所不具备的。Cpp也可以做运行期的注入,但是你要把大量的类相关的元数据储存在别的地方,在运行期调用。
但事实上,依赖注入这个概念是很朴素的,我们只要不在类中直接引用其他类,而是在更高的层次去依次创建类并且通过构造函数之类的方法注入相关依赖就可以实现类之间的解耦。这种组织代码的方式,不管是在任何语言当中都能起到很好的作用。只是没有IOC容器的框架,需要手动管理依赖还是很繁琐的。
所有成规模的,需求经常变动或者你要有效进行单元测试的代码,依赖注入都可以极大的缓解代码耦合的状况。其实很多时候我们都用了这些技巧,只是没有意识到罢了。依赖注入的本质就是将手动管理依赖交由专有的组件去管理。
所以,流行的不是依赖注入,而是框架。
另外,大量程序员在Spring的熏陶下已经先入为主;但凡提供依赖注入,就首先想到了Java,想到Spring。其他语言由于自身语法特性,即是实现了依赖注入,也可能和Spring的实现方式 和 使用方式 完全不一样,大家都可能觉得不够地道,以至于 不会用 。
比如,实现了一个golang的依赖注入框架:Gone(的“标签” 尝试 代替 Java中的“注解”,然而很多功能实现起来是有难度的,不能不换一种方式实现,但是对于使用者来说就是门槛。另外,golang中还有尝试使用 泛型 实现依赖注入的 kod 框架,教学成本就更高了。
依赖注入,本来只是一种设计模式,没有使用的必要性,没有也可能很愉快的编程,没有就没有了呗,很多人是这么想的。但是我还是推荐大家使用