TreeviewCopyright © qgao 2021-* all right reserved, powered by aleen42

@Provides Methods

被@Provides注解的方法(静态方法或实例方法)必须写在继承了AbstractModule的类里面,而且这个方法的返回值就是将被放进Guice map里的Provider中被绑定的bean(bind()),至于具体的实现类是啥(to()),就看方法里是怎么写的了。

public class BillingModule extends AbstractModule {
  @Override
  protected void configure() {
    ...
  }

  @Provides
  static TransactionLog provideTransactionLog() {
    DatabaseTransactionLog transactionLog = new DatabaseTransactionLog();
    transactionLog.setJdbcUrl("jdbc:mysql://localhost/pizza");
    transactionLog.setThreadPoolSize(30);
    return transactionLog;
  }
}

1 配合Binding Annotation使用

如果@ providers注解的方法有@PayPal@Named(“Checkout”)这样的绑定注释,Guice就会绑定带注释的类型。依赖项可以作为参数传递给方法。在调用方法之前,注入器会对每一个变量执行绑定。

@Provides 
@PayPal
CreditCardProcessor providePayPalCreditCardProcessor(@Named("PayPal API key") String apiKey) {
    PayPalCreditCardProcessor processor = new PayPalCreditCardProcessor();
    processor.setApiKey(apiKey);
    return processor;
}

2 异常

Guice不允许从Providers中抛异常,被@Provides注解的方法抛出的异常会被包含进ProvisionException,如果你真的想抛自定义的异常,去看一下ThrowingProviders extension中的@CheckedProvides

Copyright © qgao 2021-* all right reserved,powered by Gitbook该文件修订时间: 2022-05-30 15:20:59

results matching ""

    No results matching ""