有人可以向我解释为什么我们需要使用spring的依赖注入,只需导入一个java类,如:
import com.package.somejavaclass
我只是想知道为什么?
答案 0 :(得分:6)
Dependency Injection(和Inversion of Control)与import
无关。依赖注入允许您做出运行时决策而不是编译时决策。例如,您的类如何获取数据库Connection
。这是硬编码的配置。
import
import
语句允许您不指定类的完全限定名称。也就是说,没有import java.util.Date;
你仍然可以(例如)
System.out.println(new java.util.Date());
答案 1 :(得分:4)
依赖注入用于消除代码更改的需要,并且只能使用配置。
即,你有
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)都没有变化。
答案 2 :(得分:1)
导入 - 是静态导入,
依赖注入 - 动态导入
除了@Nirav Patel的回答,我想补充一个场景。如果我们想在不同的环境中使用不同的实现(Dev / QA / UAT / Prod),您不需要更改代码,您可以使用DI实现它,也可以在该环境中更改配置。
观看此视频,如果您需要详细说明
https://www.udemy.com/spring-framework-video-tutorial/learn/v4/t/lecture/4635190
(顺便说一句,这是Udemy的免费课程)
教师使用smtp在dev和真实电子邮件中发送模拟电子邮件,只需更改配置即可。