Quand utiliser le Printemps prototype portée?
Je veux savoir quand dois-je exactement utiliser le prototype
portée au Printemps? J'ai compris que singleton
renvoie la même instance d'objet si le bean est demandé.
Alors pourquoi devrions-nous considérer prototype
?
Explications avec des exemples aiderait beaucoup à comprendre la nécessité pour elle.
OriginalL'auteur Rahul | 2014-02-23
Vous devez vous connecter pour publier un commentaire.
Pour être clair, simple définitions:
Prototype champ d'application = Un nouvel objet est créé à chaque fois qu'il est injecté/regardé. Elle utilisera de nouveaux
SomeBean()
à chaque fois.Portée Singleton = Le même objet est renvoyé à chaque fois qu'il est injecté/regardé. Ici, il va instancier un exemple de
SomeBean
, puis le retourner à chaque fois.Prototype bean est créé au moment de l'utilisation. Ainsi, lorsque vous souhaitez avoir statefull haricots il y a fort besoin parfois d'avoir des prototypes champ d'application ou lorsque vous n'avez pas l'habitude de mettre en cache des valeurs dans les haricots. Prototype de haricots peut être associé à une session ou à certains d'appel.
Exemple:
Un objet d'accès aux données (DAO) n'est généralement pas configuré comme un prototype, car typique de DAO n'est pas tenir un état conversationnel, c'était juste plus facile pour cet auteur, la réutilisation de la base de l'singleton diagramme.
Seulement ceux que vous voulez avoir de nouvelle instance à chaque fois. Honnêtement, je ne voudrais pas utiliser prototype dans 99% des cas.
Une bonne pratique est de passer des dépendances par le constructeur. Par conséquent, vous ne devriez jamais utiliser le champ d'application de prototype. Au lieu de cela, vous devez utiliser un nouveau ou un singleton, factory.
Encore ce n'est pas clair, quand utiliser le prototype ? Peut-b en temps réel l'exemple de l'aide ici
En gros, imaginez que vous souhaitez avoir à chaque fois un nouvel objet lorsque vous accédez bean Prototype de haricot. Votre bean va être instancié à chaque fois que vous souhaitez y avoir accès, comme vous utilisez
new User()
dans de simples POJO.OriginalL'auteur RMachnik
Il est intéressant de cas d'utilisation en utilisant la portée prototype vous permettra de construire une meilleure application et fiable de conception de l'architecture, par exemple, un système en temps réel.
Imaginez que vous devez construire un système en temps réel pour le suivi des véhicules, et vous aurez 2.000.000 voitures de partage d'informations toutes les 5 secondes,
Dans le côté serveur, vous allez travailler avec deux ou plusieurs groupe distinct de configurations, l'une pour les Voitures et un autre pour les Camions.
Basé sur cet exemple simple, si vous concevez votre application pour travailler avec des groupes de configuration dans la mémoire à travers le prototype de modèle vous permettra d'atteindre une meilleure performance.
Donc, dans ce cas, chaque fois que le serveur reçoit un nouveau message à partir d'un Camion, par exemple, le serveur va obtenir l'instance de la configuration dans la mémoire à partir d'une table de hachage des instances de VehicleGrupConfiguration et ensuite appliquer la configuration du comportement de ce message doit avoir, e.g: comme le temps, réessayer... et etc.
Je voudrais souligner qu'il y a de nombreuses façons de mettre en œuvre cette situation, mais cet exemple montre qu'un prototype de modèle est très puissant en matière de performance et de modèles de conception.
Salut @MarkNorman pourriez-vous nous donner un exemple comment puis-je venu avec cette solution "au Lieu de cela, envisager de définir un groupe de Singletons du même type, chaque créés au démarrage avec un état différent de l'état" Sonne très intéressante votre idée, je vous Remercie beaucoup pour le partage de vos commentaires.
Vous trouverez un exemple ici: baeldung.com/spring-data-jpa-multiple-databases. Prendre note qu'il y a deux configuration des beans de type
LocalContainerEntityManagerFactoryBean
, l'un nomméuserEntityManager
et un autre nomméproductEntityManager
.OriginalL'auteur Lucas Pires