I have sample code that uses factories. I would like to clear the code by deleting the factories and use Guice instead. I tried to do this, but I hit a small checkpoint. I am really new to Guice, so I hope someone can help me here.
Existing customer code (using factories):
public class MailClient { public static void main(String[] args) { MailConfig config = MailConfigFactory.get(); config.setHost("smtp.gmail.com"); Mail mail = MailFactory.get(config); mail.send(); } }
My refactoring attempt using Guice:
//Replaces existing factories public class MailModule extends AbstractModule { @Override protected void configure() { bind(Mail.class) .to(MailImpl.class); bind(MailConfig.class) .to(MailConfigImpl.class); } } public class MailImpl implements Mail { private final MailConfig config; @Inject public MailImpl(MailConfig config) { this.config = config; } public void send() { ... } } public class MailClient { public static void main(String[] args) { MailModule mailModule = new MailModule(); Injector injector = Guice.createInjector(mailModule); MailConfig config = injector.getInstance(MailConfig.class); config.setHost("smtp.gmail.com"); Mail mail = //?? mail.send(); } }
How do I build an instance of MailImpl using the config object in my recycled MailClient? Should I use Guice this way?
java dependency-injection guice
Jordan allan
source share