首先我们知道,大部分时候我们使用依赖注入创建的javaBean(其实就是变量),都是全局只创建一个。
欸,这不就是全局变量吗?(其实java中没有真正的全局变量,而是依靠单例模式等方法来模拟全局变量)
那我们是不是就可以先把依赖注入当成全局变量呢?
那么问题就变成了为什么全局变量的方式要比new的方式要好呢?
这就显而易见了,对于很多类,他是只需要被我们调用方法的,或者是只需要被我们读取属性,而不需要去改属性的,那么对于这种类,我们就只需要创建一个实例,就可以避免不必要反复创建和销毁对象,减少资源浪费。
那么这种类是哪些呢?
欸!我们的service层和mapper层不就是没有属性,只有方法吗?我们的配置类不就是只需要读取数据,不需要修改数据吗?我们最常注入的类不也就是他们吗?
所以说对于这种类,定义成全局变量会更好。
那为什么我们不直接用单例模式,而是要用依赖注入呢?
那我们可以设想一个情景。现在你需要重构一个老项目,但是因为整个项目都是使用的单例模式来代替依赖注入。那么当你想知道一个类的执行需要依赖另外的那些类时,你需要到这个类的每一个函数里面去看,到底有没有获取全局变量的实例,这个工作是很烦。
而当你使用的是依赖注入呢?那么你就只需要看看类前面注入的是那些类就行了,工作量大大减轻。
其实硬要解决这个问题也可以,可以在每个需要用到注入的类里面,把要注入的类当成属性,然后把属性赋值成那个全局变量。这样的话我们也可以清楚的看到类之间的依赖关系。
但是这样的话就需要我们实现很多个单例模式,还需要给需要被注入的类初始化,这总是没有依赖注入方便的。而且依赖注入还可以声明声明周期,实际比全局变量更加灵活。
综上所述,依赖注入的方式通常要优于直接new对象,或者全局变量。
作者还是新手,如果有理解的不对的地方,还请大佬指正!!!