Dependency injection 依赖注入,无需重新编译即可更改实现

Dependency injection 依赖注入,无需重新编译即可更改实现,dependency-injection,Dependency Injection,我从单例的角度理解DI的好处,并减少锅炉板代码。但我在维基百科上也发现了这一点: 另一个好处是它提供了配置灵活性,因为 可以使用给定服务的替代实现,而无需 重新编译代码 当我使用Spring或Guice时,它总是在一个服务和它的一个实现之间订立契约。我是否缺少某个功能或错误地理解了该语句?如果要为给定服务使用哪种实现的决定在配置中,您可以在不更改代码的情况下纯粹在配置中更改该决定,只要您要使用的替代实现已经存在 Spring在很大程度上就是这种情况,它通常是在应用程序启动时读取XML配置文件来做

我从单例的角度理解DI的好处,并减少锅炉板代码。但我在维基百科上也发现了这一点:

另一个好处是它提供了配置灵活性,因为 可以使用给定服务的替代实现,而无需 重新编译代码


当我使用Spring或Guice时,它总是在一个服务和它的一个实现之间订立契约。我是否缺少某个功能或错误地理解了该语句?

如果要为给定服务使用哪种实现的决定在配置中,您可以在不更改代码的情况下纯粹在配置中更改该决定,只要您要使用的替代实现已经存在


Spring在很大程度上就是这种情况,它通常是在应用程序启动时读取XML配置文件来做出决定。

通常需要重新编译应用程序中包含配置的部分,但应用程序的其余部分可以保持不变。当这些零件放在单独的模块/组件中时,不需要重新编译这些零件。当您使用XML配置容器时(理论上),无需重新编译任何内容

如果愿意,您甚至可以更进一步,在运行时更改行为(例如使用decorators)。

+1有关更多详细信息,请参见此处: