Guice 中延迟加载的提供程序

Providers for lazy loading in 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();
    }
  }

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

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

延迟在您调用 provider.get() 的方式中,并且相对于为每个依赖项调用构造函数的时间而延迟。在您的示例中, DatabaseTransactionLog 的构造函数被调用,但当时没有创建连接。 Connection 仅在调用方法 logChargeResult 时创建(因为其中调用了 provider.get())。