当前位置: 首页 > 知识库问答 >
问题:

Guice部分注入示例

柴良哲
2023-03-14

这个例子取自一本关于依赖注入的书。

在第87页,有这个例子。

public class NewsletterManager {
  private final List<Recipient> recipients;
  private final DelivererFactory factory; // The book notes this as injected

  public NewsletterManager(List<Recipient> rs, DelivererFactory factory) {
    this.recipients = rs;
    this.factory = factory;
  }

  public void send(Newsletter letter) {
    for (Recipient recipient : recipients) {
      Deliverer d = factory.forLetter(letter);
      d.deliverTo(recipient);
    }
  }

}

我理解代码的用途,但我不理解的是如何声明或配置我的Module,以便我可以创建这个类的实例。

似乎注入了< code > deliver factory 。这个例子没有说是如何实现的,但是让我们承认它是通过构造函数注入实现的。在这种情况下,如何传递<代码>列表

我不明白的是,如何在构造函数的签名中同时自动注入对象和实例特定对象。在这种情况下,我不知道如何才能获得只有我的<code>列表的<code<NewsletterManager></code>实例

我希望我的问题足够清楚...

共有1个答案

鄂坚
2023-03-14

你说的没错,这种注射只有用工厂才能解决。

如果你有 Foo(A a, B b),其中 A 被注入并在运行时传递 B,你将需要一个 Factory FooFactory.createFoo(B b),它在内部保存对 A 的引用。

幸运的是,Guice有@Assisted注射的概念。您必须提供工厂的接口,但可以将实现的“魔力”留给 Guice。

它有很好的记录:https://github.com/google/guice/wiki/AssistedInject

您需要额外依赖com.google.inject。扩展»引导辅助注射

 类似资料:
  • 我正在使用 scala play 2.5,在尝试在我的一个控制器中注入对象时出现以下错误。我正在使用 play 给出的默认注入框架,即 Guice。 这是控制器: 以下是我想注入的服务: 这就是我使用它的方式:

  • 主要内容:Google Guice 按需注入 示例,输出注入是将依赖注入对象的过程。方法和字段注入可用于使用injector.injectMembers()方法使用退出对象进行初始化。请参阅下面的示例。 Google Guice 按需注入 示例 创建一个名为 GuiceTester 的 Java 类。 GuiceTester.java 输出 编译并运行该文件,您将看到以下输出。

  • 主要内容:Google Guice 可选注入 示例,输出注入是将依赖注入对象的过程。可选注入意味着如果存在则注入依赖项。方法和字段注入可能是可选的依赖项,如果不存在依赖项,则应该有一些默认值。请参阅下面的示例。 Google Guice 可选注入 示例 创建一个名为 GuiceTester 的 Java 类。 GuiceTester.java 输出 编译并运行该文件,您将看到以下输出。

  • 主要内容:Google Guice 字段注入 示例,输出注入是将依赖注入对象的过程。字段注入用于将值对象设置为对对象字段的依赖。请参阅下面的示例。 Google Guice 字段注入 示例 创建一个名为 GuiceTester 的 Java 类。 GuiceTester.java 输出 编译并运行该文件,您将看到以下输出。

  • 主要内容:Google Guice 方法注入 示例,输出注入是将依赖注入对象的过程。方法注入用于将值对象设置为对象的依赖项。请参阅下面的示例。 Google Guice 方法注入 示例 创建一个名为 GuiceTester 的 Java 类。 输出 编译并运行该文件,您将看到以下输出。

  • 我正在努力实现DI,特别是使用guice的构造函数注入。我很难理解如何将泛型的类类型注入到构造函数中。 我的课程如下: 我可以在运行时使用guice将类的类型注入构造函数吗?简而言之,我可以使用guice注入Foo构造函数吗?