La différence entre les haricots à singleton printanier et les motifs singleton est qu'ils sont associés à différents environnements. Les modèles singleton se réfèrent à une seule instance dans un processus JVM, tandis que Spring Singleton fait référence à une seule instance dans un conteneur de bean Spring (applicationContext).
Tout d'abord, regardez le modèle singleton. Dans un processus JVM (théoriquement, un programme Java en cours d'exécution doit avoir son propre JVM indépendant), il n'y a qu'une seule instance, donc peu importe où l'instance est obtenue dans le programme, le même objet est toujours renvoyé. Prenant l'exemple de l'exécution intégrée à Java (l'énumération est désormais la meilleure pratique du modèle singleton), peu importe où le temps et où il est obtenu, le jugement suivant est toujours vrai:
// basé sur le mode paresseux // Il n'y a toujours qu'une seule instance dans une instance jvm runtime.getRuntime () == runtime.getRuntime ()
En revanche, les haricots singleton de Spring sont étroitement liés à leurs conteneurs (applicationContext). Par conséquent, dans un processus JVM, s'il y a plusieurs conteneurs à ressort, même un haricot singleton créera certainement plusieurs instances. L'exemple de code est le suivant:
// le premier conteneur de bean spring applicationContext context_1 = new FileSystemXmlApplicationContext ("classPath: /ApplicationContext.xml"); Personne yiifaa_1 = context_1.getBean ("yiifaa", personne.class); // le deuxième conteneur de bean spring applicationcontext context_2 = new FileSystemXmlApplicationContext ("classpath: /applicationContext.xml"); Personne yiifaa_2 = context_2.getBean ("yiifaa", personne.class); // Ce n'est certainement pas égal, car plusieurs instances sont créées System.out.println (yiifaa_1 == yiifaa_2);Voici le fichier de configuration de ressort:
<! - Même s'il est déclaré singleton, plusieurs instances seront créées tant qu'il y aura plusieurs conteneurs -> <bean id = "yiifaa" scope = "singleton"> <constructor-arg name = "username"> <value> yiifaa </value> </ constructor-arg> </any
Résumer
Les haricots à singleton de Spring sont étroitement liés aux conteneurs de gestion des haricots de printemps. Chaque conteneur créera sa propre instance unique, il est donc très différent du motif Singleton dans le modèle de conception GoF. Cependant, dans les applications réelles, si le cycle de vie de l'objet est complètement remis à la gestion du printemps (non créé par une nouvelle réflexion, etc. ailleurs), l'effet du singleton peut être réellement atteint.
Ce qui précède est tout sur cet article discutant de la différence entre le singleton haricot et le modèle Singleton Spring. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!