Devrait Guice Fournisseurs cher membre des instances être annotée avec @Singleton?

Devrait Guice Fournisseurs de être annotée avec @Singleton? Ma justification: si le Fournisseur est de fournir un objet à d'autres classes Singleton et l'objet lui-même est relativement coûteux à créer, alors ne serait-il pas logique d'utiliser un Singleton Fournisseur qui construit le cher objet de ses @Injectmarqué constructeur, le stocker en tant que membre et il suffit de retourner que déjà enregistré variable globale dans la lecture? Quelque chose comme ceci:

@Singleton
public class MyProvider extends Provider<ExpensiveObject> {
    private ExpensiveObject obj;

    @Inject
    public MyProvider() {
        /* Create the expensive object here, set it to this.obj */
    }

    @Override
    public ExpensiveObject get() {
        return obj;
    }
}

Mise à jour

Permettez-moi de clarifier un peu plus ici. Ce n'est pas sur de savoir si je dois utiliser @Singleton ou .in(Singleton.class). Cela doit faire plus avec la "mise en cache" de l'objet créé.

Disons que la création d'un objet nécessaire la création de plusieurs Rpc complets, tels que la désérialisation JSON ou de faire des requêtes HTTP. Cela pourrait prendre un certain temps. Si je vais utiliser ce Fournisseur pour les injecter dans des classes à plusieurs reprises, n'est-il pas logique de n'en créer qu'un tel objet?

Notez également que je dois être capable de faire appel à un Prestataire parce que j'ai besoin pour être en mesure de les injecter dans le Fournisseur.

OriginalL'auteur ecbrodie | 2013-12-09