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()
)。
在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()
)。