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

Mak*_*dex 2 java spring dependency-injection

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

import com.package.somejavaclass
Run Code Online (Sandbox Code Playgroud)

我只是想知道为什么?

Ell*_*sch 6

DI和IoC

依赖注入(和控制反转)与无关import.依赖注入允许您做出运行时决策而不是编译时决策.例如,您的类如何获取数据库Connection.这是硬编码的配置.

import

import语句允许您不指定类的完全限定名称.也就是说,没有import java.util.Date;你仍然可以(例如)

System.out.println(new java.util.Date());
Run Code Online (Sandbox Code Playgroud)


Nir*_*tel 5

依赖注入用于消除对代码更改的需要,并且仅使用配置即可实现。

也就是说,你有

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
}
Run Code Online (Sandbox Code Playgroud)

注意:如果由于某种原因需要使用类Y更改objB实例,则需要在类A1和A2中都进行代码更改。

// code using Dependency Injection
 class A1{

@Autowired
private B objB;
//remaining code
}

class A2{
@Autowired
private B objB;
//remaining code
}
Run Code Online (Sandbox Code Playgroud)

在这里,您只需要更改为接口B创建实例的配置,然后将所需的类从X更改为Y即可。在任何Java类(此处为A1和A2)中都没有更改。