首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring (DI)如何通过连接组件来帮助开发?

Spring (DI)如何通过连接组件来帮助开发?
EN

Stack Overflow用户
提问于 2012-03-26 23:42:52
回答 4查看 165关注 0票数 2

我学习Spring已经有很长一段时间了(只是学习,没有实际的实际项目实践经验)。在我的理解中,Spring提供了一个依赖注入框架,它允许将所有类集中连接/连接到一个地方。类本身并不组成/实例化其他组件。

我可以理解,DI允许对每个组件进行更容易的单元测试,因为它们依赖于接口。

我的问题是,与传统方式(每个类实例化另一个类)相比,为什么以集中化方式(外部)连接所有类有助于开发过程(除了测试)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-27 00:37:03

为什么要以集中化的方式连接所有类

集中式配置是一个实现细节,而不是DI的一部分。例如,Guice可以在一定程度上传播配置(我没有在愤怒中使用Spring,所以我不能对此发表评论)。

为什么要连接所有的类...对外

因为这允许您更改实现。DI不是唯一的方式,但它是最受欢迎的。工厂和服务定位器是主要的替代方案。如果没有某种交换的方法,实现测试几乎是不可能的。

开发流程(除测试外)

测试是中非常重要的一部分。这本身就是将创建和使用分开的一个很好的理由。

与上面的其他两种方法和直接初始化不同,DI还使依赖项可见(例如,ctor注入)这可以帮助类的其他用户。通过使依赖项变得如此可见,当您的类执行的操作太多时,它可以用来给您一个警告(因为它将需要很多依赖项)。

票数 1
EN

Stack Overflow用户

发布于 2012-03-27 00:00:48

DI上的链接很好地解释了这一点:http://en.wikipedia.org/wiki/Dependency_injection#Motivation

依赖注入模式的主要目的是允许在运行时或通过配置文件在给定依赖接口的多个实现之间进行选择,而不是在编译时。该模式对于在测试时提供复杂组件的“模拟”测试实现特别有用;但通常用于定位插件组件,或定位和初始化软件服务。

大型软件系统中组件的单元测试是困难的,因为被测试的组件通常需要大量的基础设施和设置才能运行。依赖注入简化了调用独立组件的工作实例进行测试的过程。因为组件声明了它们的依赖关系,所以测试可以自动调用执行测试所需的那些依赖组件。

票数 3
EN

Stack Overflow用户

发布于 2012-03-26 23:59:15

它通过减少类之间的耦合来提高代码的质量。

如果一个类实例化了另一个类的实例,则两个类之间直接存在依赖关系(=紧密耦合)。因此,例如,如果类A与接口B有关系,如果类A处理接口B的实例化,那么类A必须指定具体的实现来实例化,并且这些类变得紧密耦合。

假设我们有以下接口:

代码语言:javascript
运行
复制
interface B{}

然后是下面的类

代码语言:javascript
运行
复制
class A{

    private B b = new BImpl();

...
}

在上面的例子中(没有DI),A类对BImpl有一个显式的依赖,这意味着如果你想使用B的不同实现,那么你也必须改变A类。

DI (和通常的松散耦合)旨在消除这种依赖,并拥有一个代码库,其中对代码的一部分的更改不会在需要大量更改的整个应用程序中产生“涟漪”。上面的例子非常琐碎,但是如果你有一个中等到大型的紧密耦合的代码库,这个问题可能会变得非常严重。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9875225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档