我知道 Java 依赖注入(inject)让生活变得更好。有很多注释处理器框架可以将 bean 映射到对象并方便地将它们注入(inject)到正确的位置。
但我从来没有听说过dependency injection
例如,使用 Python 或 Ruby。这种语言有内置支持吗?还是他们不需要?为什么?
最佳答案
简而言之,在 Python 中,由于模块的状态特性和元编程的作用,依赖注入(inject)不如 Java 中那么重要。
在 Java 等语言中,类通常定义对象的蓝图,这些对象必须在运行时通过导入它们的任何内容进行实例化。当您导入一个类时,您只会获得该类的配方。
相反,在 Python 中导入模块可以做更多的事情。在导入期间,您实际上是在命名空间内运行模块的代码 - 这意味着该模块不仅可以构造模块本身引用的单例,而且甚至可以执行复杂的任务,例如在执行导入期间连接到数据库。当两个模块导入相同的引用模块时,第二个模块会继承 Python 首次导入时的模块评估概念,保留和更改第一个导入器可能所做的操作。此外,在 Python 和 Ruby 中扫描子模块比在 Java 中要轻松得多,与 Java 中相比,更多框架使用模块放置来指示函数(例如 Django 中的 models.py)(Java 通常倾向于注释)。
TLDR:Python(和 Ruby)中的模块和类是有状态的,而在 Java 中复制是痛苦的或不可能的,并且 import 语句的机制提供了依赖注入(inject)的大部分有趣部分(尽管不是 IoC)。它并不是不存在,只是没有必要。
关于java - 静态和动态语言中的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33267018/