【发布时间】:2013-04-11 19:29:35
【问题描述】:
我在一个模块中有一个提供者方法,用 @Provides 注释:
@Provides
public ChatServicePerformanceMonitor getChatServicePerfMon() {
...
}
我已经用@Singleton 注释了我的ChatServicePerformanceMonitor。在我使用这个实例的代码中,我不能让 guice “被动地”注入它,因为我正在使用一个构建封闭类的框架(它不使用 Guice,所以这是我知道的唯一方法获取参考):
chatServicePerfMon = injector.getInstance(ChatServicePerformanceMonitor.class);
Guice 似乎不尊重我的ChatServicePerformanceMonitor 类上的@Singleton 注释。我每次调用 injector.getInstance(ChatServicePerformanceMonitor.class) 都会得到一个实例。
将@Singleton 添加到提供程序方法似乎可以解决此问题:
@Provides @Singleton
public ChatServicePerformanceMonitor getChatServicePerfMon() {
...
}
这是预期的行为吗?似乎实例上的@Singleton 应该是我所需要的。
【问题讨论】:
-
你是如何在你的第一个代码 sn-p 中创建
ChatServicePerformanceMonitor的?如果 Guice 没有在您的getChatServicePerfMon方法中创建它,那么@Singleton将被忽略。 -
是的,它是在 @Provider 方法中构造的,几乎与 provideTransactionLog 方法中的 here 描述的完全一样。似乎这一定是我正在做的事情,因为其他人一定有这个问题。但除了我直接从注入器获取实例之外,我看不出任何与他们的示例没有真正不同的东西。
标签: guice