Guice: comment configurer un @Provides et @Singleton dans un module dans ce cas?

J'ai un fournisseur de méthode dans un module annotée avec @Fournit:

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

et j'ai annoté mon ChatServicePerformanceMonitor avec @Singleton. Dans mon code, où j'utilise cette instance, je n'ai pas guice "passivement" injecter, en raison d'un cadre que je suis en utilisant que la construction de la classe englobante (il n'utilise pas de Guice, c'est donc le seul moyen que je connaisse pour obtenir la référence):

chatServicePerfMon = injector.getInstance(ChatServicePerformanceMonitor.class);

Il semble Guice ne respecte pas les @Singleton annotation sur mon ChatServicePerformanceMonitor classe. Je reçois une instance pour chaque appel de l'injecteur.getInstance(ChatServicePerformanceMonitor.class).

L'ajout de l' @Singleton pour le fournisseur méthode semble résoudre ce problème:

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

Est que le comportement attendu? Il semble qu'un @Singleton sur l'instance devrait être tous j'aurais besoin.

source d'informationauteur Alper Akture