Classe Singleton avec plusieurs chargeurs de classes
E. g, j'ai la classe Singleton
avec un champ statique instance
:
public class Singleton {
private static Singleton instance;
//other code, construct, getters, no matter
}
Je peux charger cette classe deux fois avec deux types de chargeurs de classes. Comment ai-je pu l'éviter? Il est dangereux et dangereux.
Aussi, si j'ai mis en instance à la valeur null, serait-il mis à null pour les deux classes?
Singleton singleton = Singleton.getInstance();
singleton = null;
Si vous voulez vraiment atteindre un modèle de conception singleton, puis suivre type enum en Java "un seul élément d'un type enum est la meilleure façon de mettre en œuvre un singleton"
l'enum modèle n'empêcherait pas la présence d'une instance par le chargeur de classes, le serait-il?
Sur les singletons: weblogs.java.net/blog/kirillcool/archive/2005/08/...
Malheureusement, les énumérations peuvent être différents chargeurs de classes, qui comme vous pouvez l'imaginer peut causer toutes sortes de problèmes.
l'enum modèle n'empêcherait pas la présence d'une instance par le chargeur de classes, le serait-il?
Sur les singletons: weblogs.java.net/blog/kirillcool/archive/2005/08/...
Malheureusement, les énumérations peuvent être différents chargeurs de classes, qui comme vous pouvez l'imaginer peut causer toutes sortes de problèmes.
OriginalL'auteur lies | 2013-03-01
Vous devez vous connecter pour publier un commentaire.
Si vous voulez un vrai
Singleton
à travers les chargeurs de classe, alors vous avez besoin d'un parent commun pour charger la classe en question, ou si vous devez spécifier le chargeur de classe vous-même.Mise à jour: à Partir du commentaire de @Pshemo ci-dessous un peu juste du contenu dans le blog ci-dessous pourrait venir directement à partir d'un JavaWorld Article. J'ai laissé l'entrée de blog, car cela peut toujours aider quelqu'un, mais son bon de savoir où le contenu d'origine.
Original:
Il y a un blog entrée qui vous donne le moyen de le faire" (bien que je n'ai pas essayé!), et il semble assez raisonnable
Comme demandé ci-dessous un extrait de code dans mon lien ci - dessus- je ne vous suggérons de visiter le blog, bien que pour le contexte:
S'il vous plaît, inclure le code exemple.
Comment fonctionne ce code fait aider? Comment cet être invoquée pour s'assurer que le singleton reste un singleton à travers les chargeurs de classe?
Êtes-vous sûr que Sneha est l'auteur de ce post (ou au moins une partie de classe de chargeurs)? De ce que je vois lié post a été publié
8 JANUARY 2009
mais il a la même apparence que la partie de la très ancienne l'article de javaworld publiéApr 25, 2003
. Post sur le blog contient même phrase "La méthode précédente peut être utilisée à la place deClass.forName()
", ce qui semble hors de son contexte, car il n'y a pas deClass.forName()
méthode utilisée n'importe où, plus tôt, alors qu'il fait sens dans javaworld depuis Exemple 10 utilise la réflexion.Voici un Internet Archive Wayback Machine lien de la défunte java.net blog de l'URL fournie par @AnkitKumar: web.archive.org/web/20051117213814/http://weblogs.java.net:80/.... Cet auteur est Kirill Grouchnikov et le titre est "Comment un pouvez votre instance du singleton?"
OriginalL'auteur
C'est un hack de détourner le fait que
Properties
s'étendMap
, un vieux regrettable décision de conception.Cela pourrait être fait paramétrée, mais alors l'initialisation serait paresseux et aller à
getSingleton()
.Properties
estHashtable
, donc il est thread-safe (selon les documents). Donc, on pourrait utiliserprops.computeIfAbsent()
. Mais je l'aime de cette façon, plus.Aussi lire ici: Champ d'application de l'Propriétés Système Java
Je viens de l'a écrit et il y a une chance il y a quelque chose que j'ai négligé qui permettrait d'éviter ce travail.
OriginalL'auteur