@Provides
で注釈が付けられたモジュールにプロバイダーメソッドがあります。
@Provides
public ChatServicePerformanceMonitor getChatServicePerfMon() {
...
}
ChatServicePerformanceMonitor
に@Singleton
の注釈を付けました。私のコードでは、このインスタンスを使用していますが、囲んでいるクラスを構築しているフレームワークのため、Guiceを「パッシブ」に注入することはできません(Guiceを使用しないため、これが唯一の方法です)参照を取得するには):
chatServicePerfMon = injector.getInstance(ChatServicePerformanceMonitor.class);
GuiceはChatServicePerformanceMonitor
クラスの@Singleton
アノテーションを尊重していないようです。 Injector.getInstance(ChatServicePerformanceMonitor.class)を呼び出すたびにインスタンスを取得します。
@Singleton
をプロバイダーメソッドに追加すると、これが修正されるようです。
@Provides @Singleton
public ChatServicePerformanceMonitor getChatServicePerfMon() {
...
}
それは予想される動作ですか?インスタンスの@Singleton
は私が必要とするすべてのものである必要があります。
次のようにChatServicePerformanceMonitor
を作成している場合:
_@Provides
public ChatServicePerformanceMonitor getChatServicePerfMon() {
return new ChatServicePerformanceMonitor();
}
_
次に、Guiceがオブジェクトを作成していないため、クラスレベルの_@Singleton
_アノテーションは効果がありません。 Guiceは、作成したオブジェクトにのみスコープを適用できます。 _@Singleton
_をgetChatServicePerfMon()
メソッドに追加しても問題はありません。
ChatServicePerformanceMonitor
クラスに引数のないコンストラクター(または_@Inject
_コンストラクター)があり、_@Provides
_メソッドを削除した場合、インジェクターを継続的に呼び出すと同じシングルトンが返されます。
当面の間、この機能は利用可能です(Guice 4.0でテスト済み)。
@Provides
メソッドにも、スコープを適用するために@Singleton
で注釈を付けることができるようになりました。 https://github.com/google/guice/wiki/Scopes を参照してください