我正在开发一个为任何消费者提供会话的课程。因此,该类负责获取SessionFactory并打开会话并在需要时传递它。
那么,什么是更好的设计? 像这样的类中的静态方法?
public class DbStatIo {
private static SessionFactory factory=null;
public static Session getSessionForStatDb(){
if (factory==null){
SessionFactory factory=new Configuration()
.configure(FilesManager.getSenseiConfigForStatDb())
.buildSessionFactory();
}
return factory.openSession();
}
}
还是仅仅是当地的公共职能部门?或其他什么?
答案 0 :(得分:2)
SessionFactory
实例的创建是一项非常昂贵的操作,因为它拥有大量信息(如图here所示);因为它是线程安全的,具有单个实例(作为单例)或保持静态引用应该就足够了。
但是,将它作为单例使用可能会让您更好,更灵活地控制对象的生命周期,而不是将其作为静态类中的字段存储。您可以将数据访问对象依赖于IDatabaseService
,公开方法getSession
,由HibernateService
的单个实例实现。