为什么依赖注入用的是 Interface 不是 Class?

查看 73|回复 3
作者:edis0n0   
arloor   
1.解耦
2.提高代码可用性
打个比方,如果 A 类依赖 B 类, 此时我们不需要 B 类了,只需在 B 类实现的接口上在定义一个 C 类,然后把 B 类不加入容器,C 类加入容器,此时你的代码逻辑走的就是 C 类的逻辑了
另外可以利用这个特性来取容器中所有属于这个接口实现的对象的集合
Saxton   
例如,如果我们有一个 OrderService 类,它依赖于一个 PaymentService 类,如果我们在 OrderService 中直接使用 PaymentService 的实例,就会导致 OrderService 与 PaymentService 的紧密耦合,后续修改将变得困难。
因此,我们就可以通过使用接口(Interface)而不是类(Class)来解决这个问题。具体做法是,我们定义 PaymentService 接口,然后在 OrderService 中声明一个 PaymentService 类型的成员变量,并使用接口类型实现依赖注入。这样,当我们需要更改 PaymentService 实现时,只需要修改这个实现,而不需要对 OrderService 进行修改。
Saxton   
第二场景:
策略模式, 使用依赖注入可以轻松完成, 只需定义一个接口类型的泛型 list ,spring 会自动注入该接口所有实现类并加入的容器的对象
您需要登录后才可以回帖 登录 | 立即注册

返回顶部