2010-01-24 8 views
0

Nous transférons notre implémentation héritée au modèle Spring IBatis. Je suis un peu coincé dans la modélisation de ces objets de manière plus propre en utilisant le modèle de printempsInitialisation paresseuse du cache avec Spring IBatis

Disons que j'ai deux classes [Tous les deux sont singleton]

DAOImpl met en œuvre DAOInterface

CacheDAOImpl implémente DAOInterface

Code snip animaux montrant l'initialisation de l'objet dans CacheDAOImpl

..... 

private static CacheDAOImpl ourInstance = new CacheDAOImpl(); 

public static CacheDAOImpl getInstance() 
{ 
    return ourInstance; 
} 

private CacheDAOImpl() 
{ 
// intialiazes all caches 
} 

extrait de code de DAOImpl montrant la CacheDAOImpl utilisation d'objets

private DAO getCacheDAO() 
{ 
    return CacheDAOImpl.getInstance(); 
} 

@Override 
public SomeObject lookUpId() 
{ 
    return getCacheDAO().lookUpId(); 
} 

Dans le cache de mise en œuvre ci-dessus est initialisé uniquement lorsqu'une méthode est invoquée dans DAOImpl alors qu'avec le modèle d'initialisation de Spring, pouvons-nous le faire? Lazy-init peut ne pas fonctionner ici car l'objet DAOImpl sera toujours accessible par le bean non-paresseux

Répondre

0

Premièrement, la manière de définir un objet comme singleton est de définir dans le champ singleton (qui est la valeur par défaut) la portée du bean. En deuxième lieu, lazy-init devrait fonctionner. Simplement, le processus d'initialisation du bean DAO diffère du processus d'utilisation. C'est à dire. quand il est construit, n'initialise pas le cache - seulement quand ses méthodes sont appelées.

+0

@Bozho Merci. Il sera toujours accessible par un haricot non-paresseux. Je vais modifier le message pour plus de clarté. – Chandra

Questions connexes