依赖注入是否有助于我们实现松散耦合?

时间:2012-10-09 11:13:09

标签: java spring dependency-injection

  

可能重复:
  How exactly does dependency injection reduce coupling?

依赖注入作为一个概念,我认为,封装了松耦合。说它有助于实现松散耦合是否正确?根据我的理解,如果你设计了一个松散耦合的类,那么你可以在它上面实现DI。如果我错了,请帮助我理解并纠正我。

3 个答案:

答案 0 :(得分:3)

正如@maba建议的那样,这个网站上有很多相关材料。

但无论如何:是的,你是对的。你总是可以自己实现DI,但这通常是太复杂的任务。因为如果你想保持简单,你会遇到“依赖携带”的问题以及许多其他问题。

快速浏览Guice,Spring,Pico ;-)它们都经过了良好的测试和功能齐全。祝你好运。

答案 1 :(得分:2)

我想说松散耦合本质上与DI无关。如果需要,可以在具有完全紧耦合的项目上使用DI。

松耦合是将一个组件与另一个组件的实现细节隔离开来。它通常在java中通过提供协作者作为接口的实例而不是具体的类来实现。

我要说的是,在许多情况下,DI往往会引导人们使用松散耦合的代码,但它并没有强迫它们使用它(尽管在某些产品中像spring一样,不使用接口有很多缺点)。容器也支持连接松散耦合的协作者。这个例子在DI容器中非常精细,同时紧密耦合。

public class FooService { ... }

public class SomeOtherService {
     public SomeOtherService(FooService fooService) {
          this.fooService = fooService;
     }
}

然而,这是松耦合的,因为“SomeOtherService”与接口绑定。

public interface FooService { ... }

public class SomeOtherService {
     public SomeOtherService(FooService fooService) {
          this.fooService = fooService;
     }
}

插入你最喜欢的布线机制(guice,spring annotations,spring xml,java cdi),但概念是一样的。

维基百科有一篇关于松散耦合的好文章:

http://en.wikipedia.org/wiki/Loose_coupling

答案 2 :(得分:0)

是的,DI有助于实现松散耦合,因为无论您需要任何组件或服务的对象,您都可以通过它的超级接口类型自动装配它。根据您将在应用程序上下文文件或类中指定的类的类型,您将使用@Component,@ Service或@Reposirory进行注释,注入的实际对象的类型将在运行时决定。