Services are allowed to declare dependencies on other services using either of 2 approaches:
Any method on the service implementation class accepting a single parameter and annotated with @
InjectService is considered requesting injection of another service.
By default the type of the method parameter is expected to be the service role to be injected. If the parameter type is different than the service role, the
serviceRole attribute of the
InjectService should be used to explicitly name the role.
By default injected services are considered required, that is the start up will fail if a named dependent service is missing. If the service to be injected is optional, the
required attribute of the
InjectService should be declared as
false (default is
The second approach is a pull approach where the service implements the optional service interface
org.hibernate.service.spi.ServiceRegistryAwareService which declares a single
During startup, Hibernate will inject the
org.hibernate.service.ServiceRegistry itself into services which implement this interface. The service can then use the
ServiceRegistry reference to locate any additional services it needs.