Dependency injection Guice部分注入示例
这个例子摘自一本关于 在第87页,有一个例子Dependency injection Guice部分注入示例,dependency-injection,guice,Dependency Injection,Guice,这个例子摘自一本关于 在第87页,有一个例子 public class NewsletterManager { private final List<Recipient> recipients; private final DelivererFactory factory; // The book notes this as injected public NewsletterManager(List<Recipient> rs, DelivererFact
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);
}
}
}
公共类时事通讯管理器{
私人最终名单接受者;
private final DeliverierFactory;//这本书将此作为注入内容
公共通讯经理(列表、送货工厂){
这是1.5卢比;
这个工厂=工厂;
}
公共无效发送(通讯信){
用于(收件人:收件人){
发货人d=工厂。用于信函(信函);
d、 交付人(接收人);
}
}
}
我理解代码的作用,但我不理解的是如何实例化或配置我的模块
,以便创建此类的实例
似乎deliverierfactory
已被注入。示例没有说明如何进行,但我们承认这是通过构造函数注入实现的。在这种情况下,如何传递我想要的时事通讯管理器
实例所特有的列表
实例?如何使用Guice实例化配置了模块的DeliverFactory
和特定的列表
实例的时事通讯管理器
我不明白的是,如何在构造函数的签名中同时自动注入对象和特定于实例的对象。在这种情况下,我不知道如何获得只有我的列表的时事通讯管理器
的实例。我必须依赖工厂吗?在这种情况下,deliverrfactory
injection有什么用,因为我也必须在我的工厂中注入它
我希望我的问题足够清楚…你是对的,这种注射只能通过工厂来解决
如果您有Foo(A,B)
,其中A在运行时被注入,B在运行时被传递,那么您将需要一个工厂FooFactory.createFoo(B)
,该工厂内部保存对A的引用
幸运的是,Guice有@Assisted Injection的概念。您必须提供工厂的接口,但可以将实现的“魔力”留给Guice
它有很好的记录:
您将需要对com.google.inject.extensions»guice辅助注入的额外依赖项