java - 带继承的 Guice 注入(inject)

标签 java dependency-injection guice

首先,很抱歉我无法为我的标题找到更具体的措辞。这是我的代码片段:

public abstract class A {
 // dependencies
 private Client client;

 @Inject 
 public A(Client client) {
    this.client = client;
 }

 public abstract foo();

 protected void bar() {
  client.bar();  
 }
}

public class B extends A {
 ...
}

public class C extends A {
 ...
}

我的问题是:BC 实际上都不关心boo 方法是如何在A 中实现的。 A 使用 client 仅用于 boo 实现。我不想通过 BC 的构造函数继续注入(inject) client。我有哪些选择?我想我可以直接在 client 字段声明上使用 @Inject 注释而不是构造函数。这是一个好方法吗?还有其他推荐的方法吗?或者我在这里对 DI 有什么误解吗?

提前致谢, 巴尔加瓦

最佳答案

我最近开始使用的一种模式是让子类继承父类(显然),并注入(inject)它。父类只需要一个拷贝构造函数,也不能是抽象的:

class A {
  private Client client;

  @Inject
  public A(Client client) {
    this.client = client;
  }

  public A(A other) {
    this(other.client);
  }
}

class B extends A {
  @Inject
  public Child(A a, Others others) {
    super(a);
  }
}

A的依赖留在A,B的依赖留在B。

关于java - 带继承的 Guice 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10838756/

相关文章:

java - Guice 运行时依赖参数重新注入(inject)

java - 即使将 jsr94.jar 安装在结构正确的 m2 文件夹中,Maven 也无法检测到 jsr94.jar

java - 简单的画

node.js - 使用nodejs进行依赖注入(inject): some ideas?

java - Guice:如何为一种类型获取多个@Provides?

java - 验证 guice 模块配置 - 如何使用 SPI?

java - 如何对非常大的文件进行排序

java - 如何正确覆盖 Spring 和 Hibernate 的 BasicDataSource

c# - ASP.NET Core 解析 DbContext 依赖以初始化迁移

c# - .net 的控制反转