2010-05-13 3 views
0

Je définis un bean de type AnnotationSessionFactoryBean à utiliser dans une application Web.AnnotationSessionFactoryBean et singleton scoped bean (Spring framework)

Si je ne le définis pas explicitement comme NOT singleton, il doit être singleton.

Maintenant, il est lié au thread en cours.

Cela signifie qu'il ne peut pas s'agir d'un singleton.

p.s. La session produite par Factory n'est pas un singleton, SessionFactory d'un autre côté est toujours un singleton. Maintenant tout est clair!

Répondre

2

La AnnotationSessionFactoryBean (sa superclasse) définit la méthode isSingleton() qui renvoie true. Donc le SessionFactory retourné par ce grain d'usine est singleton. Par contre, le Session produit par le SessionFactory peut être lié au fil.

Vous avez donc:

BeanFactory creates SessionFactory creates Session 
+0

Juste, c'est seulement une usine! Le printemps simplifie tellement la question que l'on peut parfois passer à côté de la question. Merci. – EugeneP

1

La superclasse de AnnotationSessionFactoryBean appelé LocalSessionFactoryBean a quelques ThreadLocal<?> champs statiques:

private static final ThreadLocal<DataSource> configTimeDataSourceHolder = 
     new ThreadLocal<DataSource>(); 

private static final ThreadLocal<TransactionManager> configTimeTransactionManagerHolder = 
     new ThreadLocal<TransactionManager>(); 

private static final ThreadLocal<Object> configTimeRegionFactoryHolder = 
     new ThreadLocal<Object>(); 

private static final ThreadLocal<CacheProvider> configTimeCacheProviderHolder = 
     new ThreadLocal<CacheProvider>(); 

private static final ThreadLocal<LobHandler> configTimeLobHandlerHolder = 
     new ThreadLocal<LobHandler>(); 

Ainsi, même une seule instance de ce haricot peut interagir différemment dans différents threads.

+0

vraiment? Eh bien oui, c'est un objet complexe. Je vous remercie – EugeneP

Questions connexes