27

次の注釈が付けられたモジュールにプロバイダーメソッドがあります@Provides

@Provides
public ChatServicePerformanceMonitor getChatServicePerfMon() {
  ...
}

と注釈を付けChatServicePerformanceMonitorました@Singleton。このインスタンスを使用する私のコードでは、使用しているフレームワークが囲んでいるクラスを構築しているため、Guice を「受動的に」注入することはできません (Guice を使用しないため、これが私が知っている唯一の方法です)の参照を取得する):

chatServicePerfMon = injector.getInstance(ChatServicePerformanceMonitor.class);

Guice は私のクラスの@Singleton注釈を尊重していないようです。ChatServicePerformanceMonitor私は、injector.getInstance(ChatServicePerformanceMonitor.class) への呼び出しごとにインスタンスを取得します。

@Singletonをプロバイダーメソッドに追加すると、これが修正されるようです:

@Provides @Singleton
public ChatServicePerformanceMonitor getChatServicePerfMon() {
  ...
}

それは期待される動作ですか?インスタンス上で必要なもの@Singletonはすべてあるはずです。

4

3 に答える 3

30

その間、この機能は利用可能です (Guice 4.0 でテスト済み)。

@Provides@Singletonスコープを適用するために、メソッドに注釈を付けることもできるようになりました。https://github.com/google/guice/wiki/Scopesを参照してください

于 2016-03-23T12:20:45.870 に答える