我定義了一個類型爲AnnotationSessionFactoryBean的bean的bean,以便在web-app中使用。AnnotationSessionFactoryBean和單例範圍bean(Spring框架)
如果我沒有明確地將其定義爲NOT singleton,那麼它必須是singleton。
現在,它被綁定到當前線程。
這意味着它不能是一個單身人士。
p.s. Factory生成的會話不是單例,SessionFactory一直是單例。現在一切都清楚了!
我定義了一個類型爲AnnotationSessionFactoryBean的bean的bean,以便在web-app中使用。AnnotationSessionFactoryBean和單例範圍bean(Spring框架)
如果我沒有明確地將其定義爲NOT singleton,那麼它必須是singleton。
現在,它被綁定到當前線程。
這意味着它不能是一個單身人士。
p.s. Factory生成的會話不是單例,SessionFactory一直是單例。現在一切都清楚了!
AnnotationSessionFactoryBean
(它的超類)定義了返回true的isSingleton()
方法。所以這個工廠bean 返回的SessionFactory
是單身人士。
另一方面,SessionFactory
生成的Session
可能是線程綁定的。
所以,你必須:
BeanFactory creates SessionFactory creates Session
的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的單個實例可能在不同的線程交互的方式不同。
真的嗎?好的,這是一個複雜的對象。謝謝 – EugeneP 2010-05-13 08:09:36
對,這只是一個工廠!春天把事情簡化到這樣的程度,有時候人們可能會錯過這一點。謝謝。 – EugeneP 2010-05-13 08:06:00