1

可能重复:
依赖注入究竟如何减少耦合?

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

4

3 回答 3

3

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

但无论如何:是的,你是对的。您始终可以自己实现 DI,但它通常过于复杂。因为如果你想保持简单,你会遇到“依赖携带”问题和许多其他问题。

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

于 2012-10-09T11:21:59.067 回答
3

我想说松耦合本质上与 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注解、spring xml、java cdi),但概念是一样的。

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

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

于 2012-10-09T20:42:32.373 回答
0

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

于 2012-10-09T13:35:38.313 回答