在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();
}
}
在世界上哪里可以看到导致延迟加载的特殊点?
答案 0 :(得分:5)
创建连接可能很昂贵,而且可能并不总是需要它。因此,guice框架不是在注入时创建连接,而是允许注入“提供者”,这将在调用get()
方法时创建依赖关系。
延迟与您调用provider.get()
的方式有关,并且它相对于为每个依赖项调用构造函数的时间而延迟。在您拥有的示例中,将调用DatabaseTransactionLog
的构造函数,但此时不会创建任何连接。只有在调用方法Connection
时才会创建logChargeResult
(由于其中有provider.get()
调用)。