Book Image

Learning Google Guice

By : Hussain Pithawala
Book Image

Learning Google Guice

By: Hussain Pithawala

Overview of this book

<p>Google Guice is an open source software framework for the Java platform released by Google under the Apache License. It provides support for dependency injection using annotations to configure Java objects.</p> <p>Learning Google Guice is a concise, hands-on book that covers the various areas of dependency injection using the features provided by the latest version of Google Guice. It focuses on core functionalities as well as the various extensions surrounding Guice that make it useful in other areas like web development, integration with frameworks for web development, and persistence.</p> <p>Learning Google Guice covers Guice extensions which avoid complex API usage. You will start by developing a trivial application and managing dependencies using Guice. As the book gradually progresses, you will continue adding complexity to the application while simultaneously learning how to use Guice features such as the Injector, Provider, Bindings, Scopes, and so on. Finally, you will retrofit the application for the Web, using Guice not only to manage dependencies, but also to solve configuration related problems.</p>
Table of Contents (17 chapters)
Learning Google Guice
Credits
About the Author
Acknowledgments
About the Reviewers
www.PacktPub.com
Preface
Index

Binding collections


We saved binding collections for this chapter, because this is something, which requires use of Providers, we will introduce MultiBinder for binding Guice managed objects.

Using TypeLiteral

Let's start with a simple example, where in we need to inject objects that are not managed by Guice. Let's try to inject a Set<String> messages in FlightEngine. Define an attribute, and annotate the setter with injector.

@Inject
public void setMessages(Set<String> messages) {
  this.messages = messages;
}

Next, we need to write a provider for the same:

public class MessageProvider implements Provider<Set<String>> {

  @Override
  public Set<String> get() {
    Set<String> messageSet = new HashSet<String>();
     messageSet.add("Hi Client");
     messageSet.add("Bye Client");
    return messageSet;
  }
}

The provider should be bound using a TypeLiteral:

bind(new TypeLiteral<Set<String>>(){}).toProvider(MessageProvider.class).in(Singleton...