【发布时间】:2012-02-06 08:44:33
【问题描述】:
假设我有一些Message 类,如下所示。 (为简单起见,这是一个虚构的类。)
public class Message {
private String text;
public Message(String text) {
this.text = text;
}
public void send(Person recipient) {
// I think I should be Guice-injecting the sender.
MessageSender sender = new EmailBasedMessageSender();
sender.send(recipient, this.text);
}
}
由于我有不同的MessageSender 实现,并且可能想要对这种发送能力进行单元测试,我想我应该在Message 的send() 方法中注入MessageSender。但是我该怎么做呢?
我见过的和我理解的所有 Guice 示例似乎都在构造函数中进行了注入:
public class Message {
private String text;
private MessageSender sender;
// ??? I don't know what to do here, since the `text` argument shouldn't be injected.
@Inject
public Message(String text, MessageSender sender) {
this.text = text;
this.sender = sender;
}
public void send(Person recipient) {
this.sender.send(recipient, this.text);
}
}
public class MessageSenderModule extends AbstractModule {
@Override
protected void configure() {
bind(MessageSender.class).to(EmailBasedMessageSender.class);
}
}
但是我的Message 类在其构造函数中接受text 参数,我不想注入它。那我应该怎么做呢?
(注意:我是一个完整的 Google Guice 菜鸟。我想我了解依赖注入,但我不明白如何用 Guice 实际实现它。)
【问题讨论】:
标签: java dependency-injection guice