当您可以导入java类时,为什么要使用依赖项注入?
有人能给我解释一下,为什么我们需要使用spring的依赖注入,而您只需要导入一个java类,比如:当您可以导入java类时,为什么要使用依赖项注入?,java,spring,dependency-injection,Java,Spring,Dependency Injection,有人能给我解释一下,为什么我们需要使用spring的依赖注入,而您只需要导入一个java类,比如: import com.package.somejavaclass 我只是想知道为什么?DI和IoC (和)与导入无关。依赖项注入允许您做出运行时决策,而不是编译时决策。例如,您的类如何获得数据库连接。这是硬编码上的配置 导入 import语句允许您不指定类的完全限定名。也就是说,没有import java.util.Date您仍然可以(例如) 依赖项注入用于消除对代码更改的需求,并使仅使用配置成
import com.package.somejavaclass
我只是想知道为什么?DI和IoC
(和)与导入无关。依赖项注入允许您做出运行时决策,而不是编译时决策。例如,您的类如何获得数据库连接
。这是硬编码上的配置
导入
import
语句允许您不指定类的完全限定名。也就是说,没有import java.util.Date代码>您仍然可以(例如)
依赖项注入用于消除对代码更改的需求,并使仅使用配置成为可能
也就是说,你有
Interface B {
//some methods
}
class X implements B{
// implement some methods of B
}
class Y implements B{
// implement some methods of B
}
// code without using Dependency Injection
class A1{
private B objB = New X();
//remaining code
}
class A2{
private B objB = New X();
//remaining code
}
注意:如果出于某种原因需要更改具有类Y的objB实例,则需要在类A1和A2中进行代码更改
// code using Dependency Injection
class A1{
@Autowired
private B objB;
//remaining code
}
class A2{
@Autowired
private B objB;
//remaining code
}
在这里,您只需要更改为接口B创建实例的配置,并将所需的类从X更改为Y,仅此而已。
java类(这里是A1和A2)中没有任何更改。导入-是静态导入
依赖项注入-动态导入
除了@Nirav Patel answer,我还想添加一个场景。如果我们希望在不同的环境(Dev/QA/UAT/Prod)中有不同的实现,您不需要更改代码,您可以使用DI实现它,还可以更改该环境中的配置
如果需要详细解释,请观看此视频
(顺便说一下,这是我的免费课程)
讲师只需更改配置,即可在dev中发送模拟电子邮件,并使用smtp发送真实电子邮件。我认为,这是一个基于意见的问题,因此我们不接受此类问题,无论如何,您应该了解一些设计模式。您仍然可以通过配置在没有DI的情况下做出运行时决策。
// code using Dependency Injection
class A1{
@Autowired
private B objB;
//remaining code
}
class A2{
@Autowired
private B objB;
//remaining code
}