什么是依赖注入?

23 浏览
0 Comments

什么是依赖注入?

这个问题已经有了答案:

我对依赖注射的概念感到很困惑。

我在软件领域非常新,对以下情况有疑问。比如说,我需要一个Json解析器类来编写我的Java代码,所以在执行Java程序时,我使用classpath参数添加了Json jar。我的程序依赖于Json jar,这是意味着我在进行依赖注射吗?

另一个例子是,使用导入语句可以解决用户类依赖于其他类(例如Java中的Date),所有这些都是依赖注射的概念吗?

我在哪里理解这个概念呢?

提前致谢。

admin 更改状态以发布 2023年5月23日
0
0 Comments

在你的具体例子中,依赖注入会像这样:

public class MyParser {
     private final JsonParser parser;
     public MyParser(JsonParser parser) {
         this.parser = parser;
     }
     public Result parse(JsonInput input) {
         Result = parser.parse(input);
     }
}

假设JsonParser是一个接口,现在你可以提供该接口的任何实现给MyParser,而不用关心你选择使用哪种具体实现。

0
0 Comments

这与如何连接组件的方式有关。例如,在上面的例子中,我希望您将解析器注入到需要它的类中。例如:

不是:

public class MyParserUsingClass {
   ...
   public MyParserUsingClass() {
      this.parser = new Parser();
   }
}

而是:

public class MyParserUsingClass {
   ...
   public MyParserUsingClass(Parser injectedParser) {
      this.parser = injectedParser;
   }
}

为什么要这样做?使用解析器的类实际上不关心解析器来自哪里,应该使用接口而不是具体的实例。通过注入解析器,您可以根据情况提供不同的实例,对其进行测试等等。否则,该类将在其内部创建它,而您无法控制它。这对于可配置的组件、跨网络通信的组件、重量级组件等特别重要。

0