J'essaie d'utiliser vertx-jersey pour créer un service web dans lequel je peux injecter mes propres services personnalisés ainsi que certains objets plus standard tels que le vertx
instance lui-même.Vertx + Jersey + HK2: AutoBindings ServiceLocator utilisant @Contract et @Service
En ce moment je suis initialisant le serveur Web comme si (par exemple suivant this example):
Vertx vertx = Vertx.vertx();
vertx.runOnContext(aVoid -> {
JsonObject jerseyConfiguration = new JsonObject();
// ... populate the config with base path, resources, host, port, features, etc.
vertx.getOrCreateContext().config().put("jersey", jerseyConfiguration);
ServiceLocator locator = ServiceLocatorUtilities.bind(new HK2JerseyBinder());
JerseyServer server = locator.getService(JerseyServer.class);
server.start();
});
La question que je vais avoir est que je veux aussi être en mesure d'utiliser l'injection de dépendance, donc je peut automatiquement câbler mes autres services en utilisant les @Contract
et @Service
HK2
annotations.
Le problème est que je crée déjà le ServiceLocator
en utilisant le ServiceLocatorUtilities
dans lequel je lie explicitement HK2JerseyBinder
et si je comprends bien, je ne devrais créer une seule instance ServiceLocator
où tout doit être accessible/lié.
Je suis également conscient que je pourrais appeler ServiceLocatorUtilities.createAndPopulateServiceLocator()
à la place, mais il ressemble à JerseyServer
avec tout le reste lié dans HK2JerseyBinder
serait alors manqué car ils ne sont pas annotés.
Y a-t-il un moyen de faire les deux ou de contourner ce problème?
Chaque ServiceLocator est associé à DynamicConfigurationService (https://javaee.github.io/hk2/apidocs/org/glassfish/hk2/api/DynamicConfigurationService.html). De cela, vous pouvez obtenir un Populator (https://javaee.github.io/hk2/apidocs/org/glassfish/hk2/api/Populator.html). Le populateur dispose de méthodes qui peuvent être utilisées pour ajouter dynamiquement des services à partir de (par exemple) des fichiers résidents ou de l'analyse de classe ou de tout autre mécanisme automatique que vous souhaitez utiliser pour découvrir des services. – jwells131313