Les classes de couche de service doivent-elles être des singletons?
Je suis en utilisant le framework Spring. Mon service classes être créés comme des singletons? Quelqu'un peut-il expliquer pourquoi ou pourquoi pas? Merci!
source d'informationauteur oym | 2010-01-31
Vous devez vous connecter pour publier un commentaire.
Oui, ils doivent être de portée
singleton
.Les Services devraient être apatride, et par conséquent, ils n'ont pas besoin de plus d'une instance.
Donc de les définir dans le champ d'application
singleton
permettrait d'économiser le temps de les instancier et les fils.singleton
est l'étendue par défaut au printemps, il suffit donc de laisser votre bean définitions telles qu'elles sont, sans préciser explicitement lescope
attribut.Vous pouvez en lire plus sur les étendues au printemps docs.
Printemps est plus facile à utiliser si vous vous en tenez à singleton étendue de haricots. Les Singletons sont sa "position par défaut", si vous le souhaitez. Oui, il prend en charge d'autres étendues (à l'aide de
scope="xyz"
dans le fichier XML), mais cela rend les choses plus difficile à utiliser et qui affecte les performances.Essentiellement, à moins que vous ayez une bonne raison de faire autrement, bâton avec des singletons.
Vous avez besoin pour la plupart des singletons. (Printemps par défaut.) Les Singletons doit être thread-safe, parce que les demandes parallèles allons utiliser la même instance unique. En fait, ils doivent être complètement apatrides, car il peut être détruit et recréé à tout moment.
Si vous avez besoin de garder une trace de l'état à l'intérieur de votre bean (vous ne devriez pas, ce doit être dans la base de données ou stockées à la demande), vous obtiendrez de nombreuses instances d'un même type de haricot, l'utilisation de la mémoire augmente avec le nombre de demandes, au moyen duquel les singletons, vous avez toujours seulement un exemple.
Même si vous périmètre d'haricots à une demande, ils doivent encore besoin d'être au moins thread-safe (demandes venant du même navigateur en même temps).