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.