我一直在项目中使用 Guice,我试图了解默认注入的提供程序是如何工作的。在手册的“注入提供者”部分 ( https://github.com/google/guice/wiki/InjectingProviders ) 有以下简单示例:
public class RealBillingService implements BillingService {
private final Provider<CreditCardProcessor> processorProvider;
private final Provider<TransactionLog> transactionLogProvider;
@Inject
public RealBillingService(Provider<CreditCardProcessor> processorProvider,
Provider<TransactionLog> transactionLogProvider) {
this.processorProvider = processorProvider;
this.transactionLogProvider = transactionLogProvider;
}
public Receipt chargeOrder(PizzaOrder order, CreditCard creditCard) {
CreditCardProcessor processor = processorProvider.get();
TransactionLog transactionLog = transactionLogProvider.get();
/* use the processor and transaction log here */
}
}
现在,我想知道的是 processorProvider.get() 和 transactionLogProvider.get() 的默认实现究竟做了什么。
例如:
- 始终创建 CreditCardProcessor/TransactionLog 的新实例
- 使用对象池
- 别的东西。。
我之所以问这个问题是因为我目前在我的项目中遇到了一些奇怪的行为,如果默认提供程序使用某种缓存策略,这可能会得到解释。
谢谢