为什么在导入java类时使用依赖注入?

时间:2015-09-03 02:06:48

标签: java spring dependency-injection

有人可以向我解释为什么我们需要使用spring的依赖注入,只需导入一个java类,如:

import com.package.somejavaclass

我只是想知道为什么?

3 个答案:

答案 0 :(得分:6)

DI和IoC

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和真实电子邮件中发送模拟电子邮件,只需更改配置即可。