开发手册 欢迎您!
软件开发者资料库

Google Guice - 构造函数绑定

Google Guice构造函数绑定 - 从简单和简单的步骤学习Google Guice,从基本到高级概念,包括概述,环境设置,第一个应用程序,绑定示例,链接,@ Named,常量,构造函数,内置,即时绑定,绑定,@ provides注释,提供者类,注入示例,构造函数,方法,字段,可选,按需,静态,自动注入,范围,AOP。

Guice提供了一种使用toConstructor()方法创建与对象的特定构造函数绑定的方法.

@Overrideprotected void configure() {   try {      bind(SpellChecker.class)         .toConstructor(SpellCheckerImpl.class.getConstructor(String.class));   } catch (NoSuchMethodException | SecurityException e) {      System.out.println("Required constructor missing");   }}

请参阅下面的完整示例.

完成示例

创建一个名为GuiceTester的java类.

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 Moduleclass 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 interfaceinterface SpellChecker {   public void checkSpelling();}//spell checker implementationclass 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);    }}

输出

编译并运行文件,你会看到以下输出.

Inside checkSpelling.jdbc:mysql://localhost:5326/emp