Google Guice Tutorial on Google Guice @Provides Annotation

guice provides a way to create bindings with complex objects using @provides annotation.

@provides
public spellchecker providespellchecker(){
   string dburl = "jdbc:mysql://localhost:5326/emp";
   string user = "user";
   int timeout = 100;
   spellchecker spellchecker = new spellcheckerimpl(dburl, user, timeout);
   return spellchecker;
}

this method is being part of binding module and provides the complex object to be mapped. see the complete example below.

complete example

create a java class named guicetester.

guicetester.java

import com.google.inject.abstractmodule;
import com.google.inject.guice;
import com.google.inject.inject;
import com.google.inject.injector;
import com.google.inject.provides;

public class guicetester {
   public static void main(string[] args) {
      injector injector = guice.createinjector(new texteditormodule());
      texteditor editor = injector.getinstance(texteditor.class);
      editor.makespellcheck();
   } 
}

class texteditor {
   private spellchecker spellchecker;
   @inject
   public texteditor( spellchecker spellchecker) {
      this.spellchecker = spellchecker;
   }
   public void makespellcheck(){
      spellchecker.checkspelling();
   } 
}

//binding module
class texteditormodule extends abstractmodule {

   @override
   protected void configure() {} 

   @provides
   public spellchecker providespellchecker(){

      string dburl = "jdbc:mysql://localhost:5326/emp";
      string user = "user";
      int timeout = 100;

      spellchecker spellchecker = new spellcheckerimpl(dburl, user, timeout);
      return spellchecker;
   }
}

//spell checker interface
interface spellchecker {
public void checkspelling();
}

//spell checker implementation
class spellcheckerimpl implements spellchecker {

   private string dburl;
   private string user;
   private integer timeout;

   @inject
   public spellcheckerimpl(string dburl, 
      string user, 
      integer timeout){
      this.dburl = dburl;
      this.user = user;
      this.timeout = timeout;
   } 

   @override
   public void checkspelling() { 
      system.out.println("inside checkspelling." );
      system.out.println(dburl);
      system.out.println(user);
      system.out.println(timeout);
   }
}

output

compile and run the file, you will see the following output.

inside checkspelling.
jdbc:mysql://localhost:5326/emp
user
100