Google Guice Tutorial on Google Guice Constructor Bindings

guice provides a way to create bindings with specific constructor of an object using toconstructor() method.

@override
protected void configure() {
   try {
      bind(spellchecker.class)
         .toconstructor(spellcheckerimpl.class.getconstructor(string.class));
      } catch (nosuchmethodexception | securityexception e) {
      system.out.println("required constructor missing");
   } 
} 

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.name.named;
import com.google.inject.name.names;

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() {
      try {
         bind(spellchecker.class)
            .toconstructor(spellcheckerimpl.class.getconstructor(string.class));
      } catch (nosuchmethodexception | securityexception e) {
         system.out.println("required constructor missing");
      } 
      bind(string.class)
         .annotatedwith(names.named("jdbc"))
         .toinstance("jdbc:mysql://localhost:5326/emp");
   } 
}

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

//spell checker implementation
class spellcheckerimpl implements spellchecker {

   private string dburl;

   public spellcheckerimpl(){}

   public spellcheckerimpl(@named("jdbc") string dburl){
      this.dburl = dburl;
   } 

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

output

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

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