Hibernate 为什么每个应用程序只使用一个SessionFactory对象?
为什么每个应用程序只使用一个SessionFactory对象?每个应用程序使用单会话工厂对象有什么好处?会话工厂对象将使用单例设计模式实现。SessionFactory的实例是线程安全的,通常在整个应用程序中共享。因为这些对象很重,因为它们包含连接信息、hibernate配置信息和映射文件、位置路径。因此,创建大量实例将使我们的应用程序变得非常重要。但是会话对象不是线程安全的。简而言之,SessionFactory对象是每个应用程序一个,会话对象是每个客户端一个 因此,每个数据源将有一个SessionFactory。应用程序可能有多个数据源,因此该实例中可能有多个SessionFactory。但您不希望在应用程序中多次创建SessionFactory 优势: 显然,这会提高应用程序的性能:) 更新- 摘自 SessionFactory的内部状态是不可变的。一旦是 此内部状态已设置。这种内部状态包括所有 关于对象/关系映射的元数据Hibernate 为什么每个应用程序只使用一个SessionFactory对象?,hibernate,spring-mvc,Hibernate,Spring Mvc,为什么每个应用程序只使用一个SessionFactory对象?每个应用程序使用单会话工厂对象有什么好处?会话工厂对象将使用单例设计模式实现。SessionFactory的实例是线程安全的,通常在整个应用程序中共享。因为这些对象很重,因为它们包含连接信息、hibernate配置信息和映射文件、位置路径。因此,创建大量实例将使我们的应用程序变得非常重要。但是会话对象不是线程安全的。简而言之,SessionFactory对象是每个应用程序一个,会话对象是每个客户端一个 因此,每个数据源将有一个Sess
因为创建
SessionFactory
是一个极其昂贵的过程,需要解析hibernate配置/映射属性并创建数据库连接池。创建数据库连接池需要建立数据库连接(即创建对象)由于定位数据库服务器、建立通信通道和交换信息以进行身份验证所需的时间,这会产生开销
因此,如果为每个请求创建一个
SessionFactory
,这意味着您没有使用数据库连接池为您的请求提供服务。您必须通过上述开销过程为每个请求设置新连接,而不仅仅是从数据库连接池获取打开的连接。关于每个应用程序一个SessionFactory对象,有一些关键点:-
1.单一数据存储:它是整个应用程序的单一数据存储。虽然可以有多个SessionFactory,但每个SessionFactory都有一个与之关联的不同数据库
2.线程安全:–SessionFactory是线程安全的,因此由于此功能,许多线程可以访问SessionFactory
3.不可变:-一旦创建SessionFactory的对象,您就不能更改或设置Session Facotyr的值。其内部状态在创建时设置
4.Singleton:–SessionFactory是在应用程序启动时构建的,它遵循Singleton设计模式
我希望这能回答你的问题
有关如何创建sessionfactory的更多详细信息,请参考URL:Ya,理解sessionfactory遵循单例设计模式非常简单。因此,在孔应用程序中只能创建一个对象。SessionFactory也是线程安全的,因此一次只能执行一个线程及其代码。sessionFactory的实例是重量级的,因为它包含连接、hibernate配置、映射文件、位置路径,所以如果您创建sessionFactory实例的数量,那么您的代码将变得非常繁重。由于这个原因,我们只为一个应用程序使用一个sessionFactory实例。为了提高应用程序的性能,我们在一个应用程序中只使用一个sessionFactory实例 有关更多详细信息,请参阅此处否您错了DarkHorse SessionFactory不是使用singleton设计模式实现的。@DarkHorse SessionFactory不是singleton,它用作singleton,它是不可变的。下面的答案是,内存问题来自为每个请求创建SessionFactory。然而,您的回答似乎暗示这是不可能的,因为SessionFactory已经是一个单例。