Guice中延迟加载的提供商

时间:2017-02-12 12:40:49

标签: java dependency-injection lazy-loading guice

the official document中,我阅读了一篇关于延迟加载提供程序的文章。但是,我无法理解为什么下面的代码意味着创建提供程序的延迟,因为我找不到任何注释或任何与延迟加载相对应的代码。 代码就是这段代码。

public class DatabaseTransactionLog implements TransactionLog {

  private final Provider<Connection> connectionProvider;

  @Inject
  public DatabaseTransactionLog(Provider<Connection> connectionProvider) {
    this.connectionProvider = connectionProvider;
  }

  public void logChargeResult(ChargeResult result) {
    /* only write failed charges to the database */
    if (!result.wasSuccessful()) {
      Connection connection = connectionProvider.get();
    }
  }

在世界上哪里可以看到导致延迟加载的特殊点?

1 个答案:

答案 0 :(得分:5)

创建连接可能很昂贵,而且可能并不总是需要它。因此,guice框架不是在注入时创建连接,而是允许注入“提供者”,这将在调用get()方法时创建依赖关系。

延迟与您调用provider.get()的方式有关,并且它相对于为每个依赖项调用构造函数的时间而延迟。在您拥有的示例中,将调用DatabaseTransactionLog的构造函数,但此时不会创建任何连接。只有在调用方法Connection时才会创建logChargeResult(由于其中有provider.get()调用)。