Maison  >  Article  >  Java  >  Exemples de modèles d'énumération singleton et d'analyse de code source en Java

Exemples de modèles d'énumération singleton et d'analyse de code source en Java

黄舟
黄舟original
2017-08-08 09:57:041457parcourir

Cet article présente principalement des informations pertinentes sur le mode singleton d'énumération JAVA et les exemples d'analyse du code source. Les amis qui en ont besoin peuvent se référer à

Mode singleton d'énumération JAVA et analyse du code source. 🎜>

Il existe de nombreuses façons de mettre en œuvre le mode singleton. Il a également été analysé en ligne qu'il est préférable d'utiliser l'énumération pour mettre en œuvre le mode à intérêt unique. Les avantages ne sont que trois points :

1. Sécurité des threads

2. Aucune nouvelle instance ne sera générée en raison de la sérialisation

3. Empêcher les attaques par réflexion Mais il ne semble y avoir aucun article expliquant comment le singleton ENUM réussit. les trois points ci-dessus. Veuillez l'expliquer aux experts. Regardons ces trois points :


Concernant le premier point de sécurité des threads, il ressort du code source de la classe décompilé qu'il l'est également. garanti via le mécanisme de chargement de classe. Cela devrait être le cas (résolu)

À propos du deuxième problème de sérialisation, il y a un article disant que la classe d'énumération implémente elle-même la méthode readResolve(), elle est donc résistante à la sérialisation. . Cette méthode est implémentée par la classe actuelle elle-même (solution)

À propos du deuxième point Attaque par réflexion en trois points J'ai moi-même essayé l'attaque par réflexion suivante, mais une erreur a été signalée... Après avoir lu la classe décompilée. code source ci-dessous, je comprends que parce que la modification de la classe singleton est abstraite, elle ne peut pas être instanciée. (Solution)

Ce qui suit est un singleton d'énumération que j'ai écrit et la classe décompilée de son fichier de classe

Singleton d'énumération


Classes restaurées après décompilation
public enum Singleton {
  INSTANCE {

    @Override
    protected void read() {
      System.out.println("read");
    }

    @Override
    protected void write() {
      System.out.println("write");
    }

  };
  protected abstract void read();
  protected abstract void write();
}


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn