The Coder's Breakfast - Commentaires2022-11-22T14:44:11+01:00Olivier Croisierurn:md5:7bccc57fa40daaa0bbb47c16f3d66529DotclearDe la bonne implémentation du Singleton en Java - storeurn:md5:4f52276a32e9794fbd5e6b7ca766f2532017-12-24T10:00:50+01:002017-12-24T10:00:50+01:00store<p>Imaginez une seconde la taille du framework Spring ou Hibernate sans utiliser l'introspection, imaginez tous les bugs potentiels avec l'injection Spring sans Reflection, la bande des quatre ont défini le concept Singleton comme pattern, dans les faits surtout en Java, c'est un concept difficile à mettre en œuvre dans des environnements type J2EE.</p>De la bonne implémentation du Singleton en Java - Olivier Croisierurn:md5:1e0253b8c2892c7333797fe88122bd772017-12-18T11:04:51+01:002017-12-18T11:04:51+01:00Olivier CroisierL'article visait à exposer les différentes options possibles, avec leurs avantages et inconvénients, dans le cadre d'une utilisation "normale" de Java.
De manière générale, à partir du moment où vous utilisez la réflexion, vous pouvez oublier à peu près toutes les garanties du langage...De la bonne implémentation du Singleton en Java - storeurn:md5:9d5d1c5eacfea436172efe7c56fd31622017-12-17T19:14:39+01:002017-12-17T19:14:39+01:00store<p>Avec l'introspection, le singleton tel que défini par les différentes méthodes ci-dessus devient obsolète, pour preuve le code suivant :</p>
<p>public static void main( String<a href="http://thecodersbreakfast.net/index.php?post/2008/02/25/" rel="nofollow"></a> args ) throws Exception</p>
<pre> {
Singleton singleton1 = Singleton.getInstance();
Constructor<?> constructor = singleton1.getClass().getDeclaredConstructor( new Class[0] );
constructor.setAccessible( true );
Singleton singleton2 = (Singleton) constructor.newInstance();
if( singleton1 == singleton2 )
{
System.out.println( "Two objects are same" );
}
else
{
System.out.println( "Two objects are not same" );
}
singleton1.setValue( 1 );
singleton2.setValue( 2 );
System.out.println( singleton1.getValue() );
System.out.println( singleton2.getValue() );
}</pre>
<p>Donne le résultat suivant :</p>
<p>Two objects are not same<br />
1<br />
2</p>De la bonne implémentation du Singleton en Java - fxrobinurn:md5:2e1d31561a394d19ab44580270d544b82017-12-16T14:29:42+01:002017-12-16T14:29:42+01:00fxrobin<p>Bonjour, je reviens aussi sur ce billet et sur l'un des commentaires qui n'a pas été pris en compte à mon avis.</p>
<p>Dans le billet, juste après l'exemple du Singleton "basique" :<br />
"<em>Dans l'implémentation ci-dessus, l'instance du Singleton est automatiquement créée au démarrage de l'application</em>."</p>
<p>Dans le commentaire de "HollyDays", le JVM (et son classloader synchonized) charge la classe uniquement quand il en a besoin et donc seulement au premier appel.</p>
<p>Voici la preuve :</p>
<pre>
public class LazySingleton {
private static final LazySingleton instance = new LazySingleton();
private LazySingleton() {
System.out.println("Construction du Singleton au premier appel");
}
public static final LazySingleton getInstance() {
return instance;
}
@Override
public String toString() {
return String.format("Je suis le LazySingleton : %s", super.toString());
}
}</pre>
<p>et le test</p>
<pre>public class MainProg {
public static void main(String[] args) {
System.out.println("Démarrage du programme");
System.out.println("Mon singleton n'est toujours pas chargé ...");
System.out.println("Bon allez, je me décide à l'appeler ...");
LazySingleton singleton = LazySingleton.getInstance();
System.out.println("Et maintenant je l'affiche ...");
System.out.println(singleton);
}
}</pre>
<p>ce qui donne dans la console :</p>
<pre>
Démarrage du programme
Mon singleton n'est toujours pas chargé ...
Bon allez, je me décide à l'appeler ...
Construction du Singleton au premier appel
Et maintenant je l'affiche ...
Je suis le LazySingleton : demo.LazySingleton@7852e922</pre>
<p>Par ailleurs, un Singleton qui se fonde sur une enum, oui très bien dans 90% des cas, mais on ne peut pas en hériter, car une enum ne s'hérite pas. Ce qui peut être pénalisant dans les 10% de cas.</p>
<p>Pour terminer, c'est dommage qu'un si bon article reste en l'état et ne soit pas corrigé, car de nombreuses se fondent dessus et, de fait, sont induites en erreur.</p>La SASU en chiffres - laemurn:md5:e4182e05f16e97317d96296280672b022017-12-09T01:01:04+01:002017-12-09T01:01:04+01:00laem<p>Super outil !<br />
Juste une remarque : l'État ne se sert pas à tous les niveaux.<br />
Il y a beaucoup de prélèvements, oui, mais certains financent la sécu et pas l'État.</p>La SASU en chiffres - Olivier Croisierurn:md5:afb4dcba742e9a39238d65a279d0c2b02017-09-22T00:59:49+02:002017-09-21T23:59:49+02:00Olivier Croisier@jim Oui, ce serait bien !
Personnellement, je ne connais pas les détails des calculs pour les EURL, EIRL, Entreprise Individuelle, etc. Mais le code est dispo sur GitHub, il suffit qu'une bonne âme clone le projet et ajuste les valeurs !La SASU en chiffres - jimurn:md5:3f61bcfec24eee02e4a8863e6c16481f2017-09-20T12:31:37+02:002017-09-20T11:31:37+02:00jim<p>Super !<br />
Ca pourrait être cool de faire un tel comparateur aussi moderne et bien expliqué pour l'eurl</p>Au coeur du JDK : performance des conversions - Abderrahim Laakaburn:md5:fc27f2f40cded635f05ddb803bb185802017-09-18T20:50:32+02:002017-09-18T19:50:32+02:00Abderrahim Laakab<p>Article tres interessant et tres instructif, merci</p>La SASU en chiffres - Damien Burn:md5:c6363c6bdfee0a201a7087f8cbe5d7bf2017-08-10T10:41:33+02:002017-08-10T09:41:33+02:00Damien B<p>Et c'est l'écran blanc du javascript non-standard, on se contentera du screenshot.</p>La SASU en chiffres - Fredurn:md5:ccdbbc0864e369c27becc62da58624382017-08-09T11:14:57+02:002017-08-09T10:14:57+02:00Fred<p>Oui, évidemment, le navigateur ici, sans être trop ancien, est... corporate. Le mot est bien choisi.</p>