java – Guice只注册一些构造函数
发布时间:2020-12-14 05:38:18 所属栏目:Java 来源:网络整理
导读:假设我有一些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. M
假设我有一些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类在其构造函数中接受一个文本参数,我不想注入它.那我该怎么办呢? (注意:我是一个完整的Google Guice noob,我认为我了解依赖注入,但我不明白如何用Guice实际实现它.) 解决方法
您可以使用辅助注射通过工厂提供文本,以及由Guice实例化的消息发送者:
public class Message { private String text; private MessageSender sender; @Inject public Message(@Assisted String text,this.text); } } 厂: public interface MessageFactory{ Message buildMessage(String text); } 模块: public class MessageSenderModule extends AbstractModule { @Override protected void configure() { bind(MessageSender.class).to(EmailBasedMessageSender.class); FactoryModuleBuilder factoryModuleBuilder = new FactoryModuleBuilder(); install(factoryModuleBuilder.build(MessageFactory.class)); } } 用法: @Inject MessageFactory messageFactory; void test(Recipient recipient){ Message message = messageFactory.buildMessage("hey there"); message.send(recipient); } Assisted Injection Wiki (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读