2017-04-19 1 views
0

Singleton L'instance est créée par ClassLoader. Contrairement à Singleton, ClassLoader créera un autre objet chaque fois qu'il rencontre une création d'objet de cette classe, si cette classe n'est pas Singleton.objet multiple par rapport à objet singleton par session

Ma question est: Peut-il y avoir 'n' nombre d'objets pour une classe par session?

+0

Qu'est-ce qu'une 'session'? –

+0

ClassLoaders ne gère pas l'instanciation d'objet, ni même l'initialisation de classe. Tout ce qu'ils font est * charger * classes et fournir un accès aux ressources. Le singleton n'est pas non plus une caractéristique de classe reconnue par Java; il s'agit plutôt d'une caractérisation des implémentations de certaines classes. –

+0

Qu'est-ce que vous voulez vraiment savoir? S'il peut y avoir plus d'une instance d'une classe non-singleton? La réponse devrait être assez évidente, non? –

Répondre

1

Il y a trois choses qui doivent se produire avant de pouvoir « utiliser » une instance d'une classe, chacun qui implique l'allocation de la mémoire de tas:

Les classes bytecode doivent être chargées et liées à résoudre tout dépendances statiques sur d'autres classes. La classe doit être initialisée. Une instance de la classe doit être créée. Le chargement et la liaison de classes se produisent généralement lorsque vous démarrez la JVM, bien que la JVM puisse le faire "paresseusement", et cela peut être fait dynamiquement; par exemple. en utilisant Class.forName (...). C'est quand la mémoire pour les classes "code" est allouée.

L'initialisation de classe est normalement effectuée immédiatement avant la première utilisation de la classe. (Les détails précis sont énoncés dans le JLS). C'est à ce moment que la mémoire pour les classes de statique sera allouée.

La création de classe se produit lorsque la nouvelle construction est utilisée. Cela déclenchera également l'initialisation de classe pour une classe qui n'a pas encore été initialisée. C'est à ce moment que la mémoire d'une instance est allouée

0

Oui, vous pouvez avoir 2 objets de classe non singleton dans la portée de session.

0

Si vous voulez vous assurer que votre session aura un nombre n d'instances de votre classe et pas plus, c'est à vous d'implémenter un tel comportement. La même chose que Singleton. Java ne fournit pas de mécanisme pour assurer l'implémentation du modèle Singleton. C'est un programmeur ou un cadre qui peut le faire. Donc, si vous voulez un nombre prédéfini d'instances de votre classe, c'est votre responsabilité. Voici l'idée la plus simple:

 public class MyTest { 
      private static List<MyTest> instances = new ArrayList<>(5); 
      static { 
       for(int i = 0; i < 5; i++) { 
        instances.add(new MyTest()); 
       } 
      } 

      public static MyTest getInstance() { 
       return instances.get(3 /*or whatever logic to determine which one/*); 
      } 

     ... 
     }