2013-02-28 108 views
0

在我的应用程序中,我有一个DAO bean,我通过Spring注入了一个Hibernate sessionFactory(配置了c3p0连接池)。我的sessionFactory bean定义如下:Hibernate DAO/SessionFactory使用

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
... 
</bean> 

什么是在线程环境中使用包装DAO bean的最佳实践和/或最佳性能?我应该将它定义为单例bean,并让它在线程之间共享,同时依赖sessionFactory的线程安全性?或者我应该为每个线程创建一个单独的DAO实例?它甚至重要吗?

回答

3

如果您的DAO没有SessionFactory以外的任何成员字段,请将每个字段用作传递给所有线程的单例。

Spring的一个常见做法是将您的DAO实现用@Repository@Autowired注释到您的服务或其他需要使用它的类中。

SessionFactory#openSession()SessionFactory#getCurrentSession()分别返回一个新的Session实例和一个线程本地Session,所以没有任何内容跨线程共享。