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