5.3. 服务依赖项类型
允许服务使用以下方法之一声明对其他服务的依赖:
- @org.hibernate.service.spi.InjectService
服务实施类上接受单个参数并标有
@InjectService
的任何方法都被视为请求注入其他服务。默认情况下,方法参数的类型应当是要注入的服务角色。如果参数类型与 service 角色不同,则应当使用
InjectService 的
serviceRole
属性来显式命名该角色。默认情况下,注入的服务被视为必需,如果缺少指定的依赖服务,则启动该服务将失败。如果要注入的服务是可选的,
InjectService 的
required 属性应声明为false
。默认值为true
。- org.hibernate.service.spi.ServiceRegistryAwareService
第二种方法是拉取方法,其中服务实施可选的服务接口
org.hibernate.service.spi.ServiceRegistryAwareService
,它声明了单一注入服务方法
。在启动过程中,Hibernate 会将
org.hibernate.service.ServiceRegistry
自身注入到实施此接口的服务中。然后,服务可以使用ServiceRegistry
引用来查找所需的任何其他服务。
5.3.1. Service Registry 复制链接链接已复制到粘贴板!
5.3.1.1. 关于 ServiceRegistry 复制链接链接已复制到粘贴板!
除服务本身外,中央服务 API 是 org.hibernate.service.ServiceRegistry 接口。服务注册表的主要用途是保存、管理和提供对服务的访问。
服务注册表采用层次结构。个注册表中的服务可以依赖于并使用同一注册表中的服务以及任何父注册表。
使用 org.hibernate.service.ServiceRegistryBuilder 构建 org.hibernate.service.ServiceRegistry 实例。
使用 ServiceRegistryBuilder 创建 ServiceRegistry 的示例
ServiceRegistryBuilder registryBuilder = new ServiceRegistryBuilder( bootstrapServiceRegistry ); ServiceRegistry serviceRegistry = registryBuilder.buildServiceRegistry();
ServiceRegistryBuilder registryBuilder =
new ServiceRegistryBuilder( bootstrapServiceRegistry );
ServiceRegistry serviceRegistry = registryBuilder.buildServiceRegistry();