- Je suis en train de mettre en œuvre une classe de service qui utilise les services des fournisseurs tiers.
- L'utilisateur va interagir avec la classe Service pour obtenir le service du fournisseur de services.
Mon exigence:
Je veux charger la classe de service qu'une seule fois (ou il persister longtemps en mémoire dire 2 h.).
Ma question:
Comment puis-je vérifier que cette classe de service est chargée une seule fois?
Si elle est chargée à chaque fois qu'une demande est faite, y a-t-il un moyen pour qu'elle persiste dans la mémoire?Chargement de la classe une seule fois
Voici le code de ma classe de service
package com.example; import com.example.spi.Multiplication; import java.util.Iterator; import java.util.ServiceLoader; public class MultiplicationService implements Multiplication{ private static MultiplicationService service; private ServiceLoader loader; public static int no=0; private MultiplicationService() { loader = ServiceLoader.load(Multiplication.class); } public static synchronized MultiplicationService getInstance() { if (service == null) { service = new MultiplicationService(); } return service; } public int getMultiplication(int a,int b){ int result = 0; try { Iterator multiply = loader.iterator(); while (result == 0 && multiply.hasNext()) { Multiplication d = multiply.next(); result = d.getMultiplication(a,b); System.out.println("Result is : "+ result); } } catch (Exception serviceError) { result = 0; serviceError.printStackTrace(); } return result; } }
Merci
Merci pour la réponse. Est-ce que mon code crée le singleton? – sjain
@sjain: Votre code est déjà un singleton. Un vieil école, mais un Singleton. –
Le code de Bozho est meilleur car il évite les problèmes avec les écritures en panne - http://www.ibm.com/developerworks/java/library/j-dcl.html – Jayan