Guice中延迟装载的提供商

Kaz*_*ita 3 java dependency-injection lazy-loading guice

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

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();
    }
  }
Run Code Online (Sandbox Code Playgroud)

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

Chi*_*hii 5

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

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