ServiceRegistry在创建SessionFactory中有啥用

Posted

技术标签:

【中文标题】ServiceRegistry在创建SessionFactory中有啥用【英文标题】:What is the use of ServiceRegistry in creating SessionFactoryServiceRegistry在创建SessionFactory中有什么用 【发布时间】:2014-02-26 12:38:05 【问题描述】:

我正在学习 Java 中的 Hibernate。 因为,要创建Session,我们必须使用SessionFactory.openSession(),而要创建SessionFactory,我们使用sessionFactory = config.buildSessionFactory(serviceRegistry);

ServiceRegistry在hibernate中有什么用??

我创建SessionFactory的代码:

Configuration config = new Configuration();
        config.addAnnotatedClass(user.class);
        config.addAnnotatedClass(emp.class);
        config.configure();

// Didn't understand the code below
            Properties configProperties = config.getProperties();
            ServiceRegistryBuilder serviceRegisteryBuilder = new ServiceRegistryBuilder();
            ServiceRegistry serviceRegistry = serviceRegisteryBuilder.applySettings(configProperties).buildServiceRegistry();
            SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);

【问题讨论】:

【参考方案1】:

ServiceRegistry 最基本的是托管和管理服务。它的契约由 org.hibernate.service.ServiceRegistry 接口定义。 目前 Hibernate 使用 3 种不同的 ServiceRegistry 实现来形成层次结构。

BootstrapServiceRegistry 标准服务注册表 SessionFactoryServiceRegistry org.hibernate.service.spi.SessionFactoryServiceRegistry 是第三个标准的 Hibernate ServiceRegistry。通常,其父注册表是 StandardServiceRegistry。 SessionFactoryServiceRegistry 旨在保存需要访问 SessionFactory 的服务。目前只有 3 个服务。

EventListenerRegistry org.hibernate.event.service.spi.EventListenerRegistry 是 SessionFactoryServiceRegistry 中管理的大服务。这是管理和公开所有 Hibernate 事件侦听器的服务。 Integrator 的一个主要用例是更改侦听器注册表。

如果进行自定义侦听器注册,了解 org.hibernate.event.service.spi.DuplicationStrategy 及其对注册的影响非常重要。基本思想是告诉Hibernate:

是什么让监听器重复

如何处理重复注册(错误、先胜、后胜)

StatisticsImplementor

org.hibernate.stat.spi.StatisticsImplementor 是 org.hibernate.stat.Statistics API 的 SPI 部分。收集器部分,如果你愿意的话。

【讨论】:

【参考方案2】:

请参考 Hibernate 文档(第 7 章):http://docs.jboss.org/hibernate/core/4.0/devguide/en-US/html/ch07.html

服务:服务是为 Hibernate 提供各种功能的可插入实现的类。具体来说,它们是某些服务契约接口的实现

ServiceRegistry :除了服务本身之外,中心服务 API 是 org.hibernate.service.ServiceRegistry 接口。服务注册中心的主要目的是保存、管理和提供对服务的访问。

【讨论】:

【参考方案3】:

参考这个: http://docs.jboss.org/hibernate/core/4.0/devguide/en-US/html/ch07.html

除了服务本身之外,中心服务 API 是 org.hibernate.service.ServiceRegistry 接口。服务注册中心的主要目的是保存、管理和提供对服务的访问。

服务注册表是分层的。一个注册表中的服务可以依赖和利用同一注册表以及任何父注册表中的服务。

使用 org.hibernate.service.ServiceRegistryBuilder 构建 org.hibernate.service.ServiceRegistry 实例。

【讨论】:

以上是关于ServiceRegistry在创建SessionFactory中有啥用的主要内容,如果未能解决你的问题,请参考以下文章

依赖注入[5]: 创建一个简易版的DI框架[下篇]

HibernateUtil hibernate4.0以上

hibernate4之实用方法

服务注册与发现的原理和实现

如何在 Java 中创建 session

session的生命周期