这个例子取自一本关于依赖注入的书。
在第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>实例
我希望我的问题足够清楚...
你说的没错,这种注射只有用工厂才能解决。
如果你有 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构造函数吗?