The motivation of Guice
- Guice alleviates the need for factories and the user of new operator in Java
- Make youself confident with Java's type safe nature.
- Helps you design better API
- Easy tests
- Less boilerplate code
- Works on Java SE, Java EE, Android and GWT
Let me give you a little taste of Guice by an example.
public interface Shorter { String shortenUrl(String text); }
public class UrlShortener implements Shorter { public String shortenUrl(String text) { // Local or remote URL shorted service request here return "short-url"; } }
public interface WeiboSender { void send(String text); }
public class WeiboBrowserSender implements WeiboSender { @Override public void send(String text) { // Send weibo. System.out.println("Weibo was sent out: " + text); } }
import com.google.inject.Inject; /** * Weibo client for posting, first it will try to shorten url, then send the weibo out. * <p/> * User: George Sun * Date: 7/12/13 * Time: 7:25 PM */ public class WeiboClient { private WeiboSender sender; private UrlShortener urlShortener; // Note the Inject here, this is the key of this example. @Inject public WeiboClient(WeiboSender sender, UrlShortener urlShortener) { this.sender = sender; this.urlShortener = urlShortener; } public void postWeibo(String text) { String weiboText = getWeiboText(); if (weiboText.length() > 140) { weiboText = urlShortener.shortenUrl(weiboText); } if (weiboText.length() <= 140) { sender.send(weiboText); } } private String getWeiboText() { return "Sample Weibo text here."; } }
import com.google.inject.AbstractModule; /** * Tell Guice what to inject, then Guice will inject instances when needed. * <p/> * User: George Sun * Date: 7/12/13 * Time: 7:40 PM */ public class WeiboModule extends AbstractModule { @Override protected void configure() { bind(WeiboSender.class).to(WeiboBrowserSender.class); bind(Shorter.class).to(UrlShortener.class); } }
import com.google.inject.Guice; import com.google.inject.Injector; /** * Driver class. * <p/> * User: George Sun * Date: 7/12/13 * Time: 7:44 PM */ public class Main { public static void main(String[] args) { Injector injector = Guice.createInjector(new WeiboModule()); WeiboClient weiboClient = injector.getInstance(WeiboClient.class); String sample = "Sample weibo text here."; weiboClient.postWeibo(sample); } }
For complete reference and documents, visit Guice project home.