我在一个注释的模块中有一个提供者方法@Provides
:
@Provides
public ChatServicePerformanceMonitor getChatServicePerfMon() {
...
}
Run Code Online (Sandbox Code Playgroud)
我已经注释了我ChatServicePerformanceMonitor
的意思@Singleton
.在我的代码中,我使用这个实例,我无法"被动地"注入它,因为我正在使用的框架构建封闭类(它不使用Guice,所以这是我知道的唯一方法得到参考):
chatServicePerfMon = injector.getInstance(ChatServicePerformanceMonitor.class);
Run Code Online (Sandbox Code Playgroud)
Guice似乎不尊重@Singleton
我ChatServicePerformanceMonitor
班级的注释.每次调用inject.getInstance(ChatServicePerformanceMonitor.class)时都会得到一个实例.
添加@Singleton
到提供程序方法似乎解决了这个问题:
@Provides @Singleton
public ChatServicePerformanceMonitor getChatServicePerfMon() {
...
}
Run Code Online (Sandbox Code Playgroud)
这是预期的行为吗?似乎@Singleton
实例应该是我需要的全部内容.
cod*_*vic 25
与此同时,此功能可用(使用Guice 4.0测试).
@Provides
现在,方法也可以用注释@Singleton
来应用范围.请参阅https://github.com/google/guice/wiki/Scopes
con*_*dit 20
如果您正在创建ChatServicePerformanceMonitor
这样的:
@Provides
public ChatServicePerformanceMonitor getChatServicePerfMon() {
return new ChatServicePerformanceMonitor();
}
Run Code Online (Sandbox Code Playgroud)
然后你的类级别@Singleton
注释将无效,因为Guice没有创建对象,你是.Guice只能对它创建的对象强制执行范围.添加@Singleton
到您的getChatServicePerfMon()
方法没有任何问题.
如果类上有无参数构造函数(或@Inject
构造函数)ChatServicePerformanceMonitor
并且删除了@Provides
方法,则对注入器的连续调用将返回相同的单例.
归档时间: |
|
查看次数: |
25038 次 |
最近记录: |