Jersey 2.*. Wie ersetzen InjectableProvider und AbstractHttpContextInjectable Jersey-1.*
Ich würde gerne eine Klasse erstellen, deren Objekte injiziert werden können, mit der @Context
annotation (oder noch besser eine benutzerdefinierte Anmerkung für Fälle, in denen ich übergeben zu müssen, ein argument für die annotation) in den Ressource-Methoden. In Jersey-1.* Ich würde verwendet haben InjectableProvider
(in meinem Fall zusammen mit AbstractHttpContextInjectable
). Was ich versuche zu erreichen, ist so etwas wie @Auth
[Eins] von dropwizard (mit Jersey 1.7).
Injektion Fähigkeiten von Jersey wurden ersetzt durch HK2 soweit ich weiß, und ich konnte nicht finden jede Beispiel was ich beschrieben habe.
Edit: Siehe diese Frage für weitere Probleme, die ich angetroffen haben, während Sie versuchen, zu verfolgen Michal ' s guide.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie implementieren InjectionResolver<T> Schnittstelle von HK2. Werfen Sie einen Blick auf vorhandene Implementierungen, die in Jersey-Arbeitsbereich:
@Context
@PathParam
,@QueryParam
, ... (über Unterklassen)@Autowired
Sobald Sie diese haben, müssen Sie zu erweitern AbstractBinder von HK2 und binden Sie Ihr
InjectionResolver
über#configure()
Methode:... und registrieren einer Instanz von dieser binder in Ihrer Anwendungsklasse (oder über feature):
Feature
:registrieren
MyFeature
inApplication
:registrieren
MyResolverBinder
oderFeature
imResourceConfig
ContainerRequestContext
und wie man richtig entsorgen Sie das injizierte Objekt, z.B. durch Aufrufclose()
. Ich finde keine Beispiel online, haben Sie Anregungen?ContainerRequestContext
erstellt für Sie von Jersey (Sie können es in den Anbieter). Wenn Sie brauchen, zu entsorgen, das Objekt, versuchen Umsetzung ein@PreDestroy
Methode.Bietet eine Implementierung von
InjectionResolver
hilft nur, mit Injektion, nicht beim auflösen von Werten für die Parameter einer Ressource-Methode.Mindestens mit Jersey 2.11, müssen Sie definieren, ein
ValueFactoryProvider
kommentiert mit@Provider
.Wenn Sie wollen auch, um den Wert der Injektion in, z.B., der Mitglieder und der Konstruktor Parameter, dann InjectionResolver gut funktioniert.