spring - 为什么 Spring 的 DI/IoC 被认为比常规的 OO 更解耦?
问题描述
我正在尝试从常规的 OO 背景中学习 spring。
在常规 OO 中,如果您想解耦依赖项。你会这样做
Car car = CarFactory.getCar();
您可以在其中使用 BigCar 和 SmallCar 实现 Car。
在 Spring 中,依赖项通过以下方式解耦
@Autowire
BigCar car;
或通过 XML 配置。
问题是如何更加解耦?在所有 3 种情况下,您要么
- 更改工厂中的 1 行代码
- 更改@Autowire 下面的 1 行代码
- 更改 1 行 XML 代码
解决方案
在春天有一个概念叫做控制反转(IoC)。基本上意味着,
控制反转是软件工程中的一项原则,通过该原则将对程序的对象或部分的控制转移到容器或框架中。
你可以在这里查看https://www.baeldung.com/inversion-control-and-dependency-injection-in-spring
所以使用 spring 我们不是在我们需要的地方创建对象,而是通过通知它应该在哪里创建来将这个责任委托给 spring。在上面的示例中,使用@Autowired。这显然比 OO 设计中的松耦合。
推荐阅读
- php - Apache/php 不会运行 shell 脚本
- javascript - JavaScript eventListener 不是函数错误
- python - 将数据附加到多维 numpy 数组
- react-select - 你如何告诉一个反应选择
- kubernetes - Kubernetes DNS 看起来无法从工作节点工作 - 连接超时;无法访问任何服务器
- javascript - 如何在 lighttpd 中提供静态 gzipped javascript 文件?
- leaflet - Leaflet.markercluster - 如何计算markerClusterGroup中的所有标记?
- vim - 是否可以在 Vim 缓冲区中有制表符
- c# - Asp.net core WebApi中空值的自定义序列化
- python-3.x - Kamailio 5:KEMI 和 Python - 导入 KSR