Salut à tous,
Ma question est indépendante du framework que j'utilise, c'est une simple question d'implémentation.
Pour commencer, je vous met dans le cadre:
Voilà j'utilise MyBatis (framework de persistance) et je voudrais implémenter le patron singleton concernant la classe SqlSessionFactory pour que son instance soit accessible partout dans l'application, puisque sa recréation à chaque fois qu'on en a besoin est déconseillée dans la documentation :

SqlSessionFactory
Once created, the SqlSessionFactory should exist for the duration of your application execution. There should be little or no reason to ever dispose of it or recreate it. It's a best practice to not rebuild the SqlSessionFactory multiple times in an application run. Doing so should be considered a “bad smell”. Therefore the best scope of SqlSessionFactory is application scope. This can be achieved a number of ways. The simplest is to use a Singleton pattern or Static Singleton pattern. However, neither of those is widely accepted as a best practice. Instead, you might prefer to investigate a dependency injection container such as Google Guice or Spring. Such frameworks will allow you to create providers that will manage the singleton lifecycle of SqlSessionFactory for you.
Mais d'un coté vu que la méthode classique de créer un singleton est :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 public final class Singleton {
 
 private static volatile Singleton instance = null;
 
     private Singleton() {
         super();
     }
 
     public final static Singleton getInstance() {
         if (Singleton.instance == null) {
            synchronized(Singleton.class) {
              if (Singleton.instance == null) {
                Singleton.instance = new Singleton();
              }
            }
         }
         return Singleton.instance;
     }
 }

Je me retrouve face à un problème, en effet mon utilisation de SqlSessionFactory se fait de la sorte:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
Donc l'idée de faire une classe qui hérite de SqlSessionFactory :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 public final class Singleton extends SqlSessionFactory {...}
me semble inefficace puisque je n'instancie pas directement l'objet SqlSessionFactory en utilisant un constructeur comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
SqlSessionFactory sqlSessionFactory = new SqlSessionFactory();
Toute idée est la bienvenue