12.5.3. Types de dépendances de service

Les services peuvent déclarer des dépendances sur d'autres services par l'une des approches suivantes :
@org.hibernate.service.spi.InjectService
Toute méthode de classe d'implémentation de service qui accepte un seul paramètre et qui est annotée par @InjectService est considérée comme réclamant une injection de la part d'un autre service.
Par défaut, le type du paramètre de méthode doit correspondre au rôle de service à injecter. Si le type de paramètre est différent du rôle de service, l'attribut serviceRole du InjectService devra être utilisé pour nommer explicitement le rôle.
Les services injectés sont requis par défaut, c'est à dire que le démarrage échouera si un service dépendant nommé est manquant. Si le service injecté est optionnel, l'attribut requis d'InjectService devra être déclaré false (la valeur par défaut est true).
org.hibernate.service.spi.ServiceRegistryAwareService
La seconde approche est une approche pull pour laquelle le service implémente l'interface de service optionnelle org.hibernate.service.spi.ServiceRegistryAwareService qui déclare une méthode injectServices unique.
En cours de démarrage, Hibernate injectera le org.hibernate.service.ServiceRegistry lui-même dans les services qui implémentent cette interface. Le service pourra alors utiliser la référence ServiceRegistry pour trouver les services additionnels dont il pourrait avoir besoin.