web-dev-qa-db-fra.com

Quelle est la différence entre un singleton Spring et un Java singleton (modèle de conception)?

J'apprends le framework Spring et je lis actuellement un livre à ce sujet. Dans ce livre, il est dit qu'un singleton Spring est différent d'un Java singleton? Qu'est-ce que cela signifie et quelles sont les différences? Merci

23
Hossein

Le singleton Java est délimité par le chargeur de classe Java, le singleton Spring est délimité par le contexte du conteneur).

Ce qui signifie essentiellement qu'en Java, vous pouvez être sûr qu'un singleton est vraiment un singleton uniquement dans le contexte du chargeur de classe qui l'a chargé. Les autres chargeurs de classe devraient être capables d'en créer une autre instance (à condition que les chargeurs de classe ne soient pas dans la même hiérarchie de chargeurs de classe), malgré tous vos efforts dans le code pour essayer de l'empêcher.

Au printemps, si vous pouviez charger votre classe singleton dans deux contextes différents, nous pourrons alors casser le concept singleton.

Donc, en résumé, Java considère quelque chose comme un singleton s'il ne peut pas créer plus d'une instance de cette classe dans un chargeur de classe donné, alors que Spring considérerait quelque chose comme un singleton s'il ne peut pas en créer plus d'un instance d'une classe dans un conteneur/contexte donné.

27
Edwin Dalorzo

A Java singleton, selon le modèle de conception où l'instanciation est limitée à un, généralement par JVM chargeur de classe par le code. Wikipedia

Un bean singleton Spring peut être n'importe quelle classe normale que vous écrivez, mais déclarer sa portée comme singleton signifie que Spring ne créera qu'une seule instance et fournira sa référence à tous les beans faisant référence au bean déclaré. Vous pouvez avoir plusieurs instances de cette classe dans votre application, mais une seule sera créée pour ce bean . Vous pouvez même avoir plusieurs beans de la même classe tous déclarés singleton. Chaque bean créera exactement une instance de la classe. Spring 3.1 Doc

4
C. Ross