在我的应用程序中,我有一个 DAO bean,我通过 Spring 使用 Hibernate sessionFactory(配置了 c3p0 连接池)注入(inject)它。我的 sessionFactory bean 的定义如下:
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
...
</bean>
在线程环境中使用包装 DAO bean 的最佳实践和/或最佳性能是什么?我应该将其定义为单例 bean 并让它在线程之间共享,同时依赖于 sessionFactory 的线程安全性吗?或者我应该为每个线程创建一个单独的 DAO 实例?这还重要吗?
最佳答案
如果您的 DAO 除了 SessionFactory 之外没有任何成员字段,请将每个字段用作传递给所有线程的单例。
Spring 的常见做法是使用 @Repository
和 @Autowired
将 DAO 实现注释到您的服务或需要使用它的其他类中。
SessionFactory#openSession()
和 SessionFactory#getCurrentSession()
分别返回一个新的 Session 实例和一个线程本地 Session,因此线程之间不会共享任何内容。
关于java - Hibernate DAO/SessionFactory 使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15143843/