2010-05-13 127 views
0

我定義了一個類型爲AnnotationSessionFactoryBean的bean的bean,以便在web-app中使用。AnnotationSessionFactoryBean和單例範圍bean(Spring框架)

如果我沒有明確地將其定義爲NOT singleton,那麼它必須是singleton。

現在,它被綁定到當前線程。

這意味着它不能是一個單身人士。

p.s. Factory生成的會話不是單例,SessionFactory一直是單例。現在一切都清楚了!

回答

2

AnnotationSessionFactoryBean(它的超類)定義了返回true的isSingleton()方法。所以這個工廠bean 返回的SessionFactory單身人士。

另一方面,SessionFactory生成的Session可能是線程綁定的。

所以,你必須:

BeanFactory creates SessionFactory creates Session 
+0

對,這只是一個工廠!春天把事情簡化到這樣的程度,有時候人們可能會錯過這一點。謝謝。 – EugeneP 2010-05-13 08:06:00

1

AnnotationSessionFactoryBean稱爲LocalSessionFactoryBean超類有一些ThreadLocal<?>靜態字段:

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>(); 

所以即使這個bean的單個實例可能在不同的線程交互的方式不同。

+0

真的嗎?好的,這是一個複雜的對象。謝謝 – EugeneP 2010-05-13 08:09:36