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

Google Guice - @Provides Annotation

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

Guice提供了一种使用@provides方法创建与复杂对象绑定的方法.

@Providespublic SpellChecker provideSpellChecker() {   String dbUrl = "jdbc:mysql://localhost:5326/emp";   String user = "user";   int timeout = 100;   SpellChecker SpellChecker = new SpellCheckerImpl(dbUrl, user, timeout);   return SpellChecker;}


此方法是绑定模块的一部分,并提供要映射的复杂对象.请参阅下面的完整示例.

完成示例

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


输出

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

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