2016-06-21 17 views
2

Ich benutze Guice als meine Abhängigkeit Injektion Framework. Ich möchte etwas hinzufügen, das die Erstellung von REST-Services erleichtert.Guice mit JAX-RS

Ich habe Guice-Servlet und es funktioniert gut für die Ausrichtung von Pfaden zu HTTP-Servlets, aber das ist alles scheint es zu tun, ich hatte erwartet, eine JAX-RS wie Annotation Syntax funktioniert, aber es nicht .

Nachdem ich JAX-RS nicht benutzt habe, habe ich gegoogelt und es scheint, dass Jersey die Referenzimplementierung dafür ist, aber es sieht so aus, als ob es sein eigenes Dependency-Injection-Framework verwendet und nicht gut mit Guice funktioniert. Außerdem hat es 5 + MB Wert von Abhängigkeiten, die viel für das, wonach ich bin, scheinen.

Ist Guice so entworfen, dass es sich nicht für JAX-RS eignet, wenn ja, was sollte ich sonst tun?

+0

Haben auch Sie alle Beiträge, die zeigen, wie die beiden DI-Frameworks zu integrieren? Sie können HK2 (Jerseys internes DI-Framework) nicht vollständig loswerden, weil Jersey es überall für seine Infrastruktur verwendet. Aber es gibt Möglichkeiten, es mit Guice zu integrieren. Ich habe ein paar dieser Posts beantwortet. Die einzigen Probleme, die ich bei dieser Integration feststellen kann, sind Nutzer, die Google App Engine verwenden. Ich benutze GAE nicht, daher konnte ich das Problem nie untersuchen. –

+1

@peeskillet - meine Frage ist nicht um guice-Trikot pro sagen, mehr, wenn ich das Richtige mache oder nicht ... das ist etwas, was ich erwarten würde, um sehr einfach zu sein, und ich würde nicht erwarten, ein zu bringen Monolith Abhängigkeit, es zu tun - es hat für mich rote Fahnen, daher die Fragen. – Cheetah

+1

Ich habe Guice + Jersey in mehreren Anwendungen gemacht, und ich bin sehr glücklich damit! Also ja, ich würde sagen, es ist das Richtige. – Jorn

Antwort

4

Ich denke, dass das guice-servlet Modul Sie fehlgeleitet hat. Guice ist ein DI-Framework. Zeitraum. Das eigentliche Ziel des Moduls guice-servlet ist nicht die Erklärung des Servlets und Filter Shortcut, sondern bietet Unterstützung für die speziellen Bereiche Anfrage und Sitzung. Diese netten Erklärungen sind syntaktischer Zucker.

Eine JAX-RS-Implementierung in Java zu wählen, kommt nicht in Frage. Sie haben mehrere Möglichkeiten (Jersey, Resteasy, Spring ...). Wenn Sie mit vollem JavaEE arbeiten, müssen Sie nicht wählen. Sie verwenden nur die Anmerkungen (und die DI) aus der Box.

Wenn Sie keinen JavaEE-Server verwenden (nur einen Webserver wie Tomcat oder andere interessante Dinge wie eine Android-App), müssen Sie Ihre Implementierung auswählen. Wenn Sie auch DI verwenden (was ich empfehle), dann muss noch eine Entscheidung getroffen werden.

Sie verwenden also nicht JavaEE, und Sie möchten eine REST-API mit JAX-RS und Abhängigkeitsinjektion implementieren. Sie recherchieren und wählen Jersey und Guice. Gute Wahl, ich habe diese auch in meinen letzten Projekten ausgewählt. Ja, das Abhängigkeitsdiagramm von Jersey ist etwas aufgebläht. Ich weiß, es könnte viel besser sein.

Jetzt ist dein Problem, wie man es zusammen arbeiten lässt, weil Jersey sein eigenes DI-Framework (HK2) verwendet, das eine schlechte Sache ist.

Sie haben viele Referenzen auf SO über Jersey-Guice Integration. Ihre beste Wette ist die Guice HK2 bridge.

Was? Sie möchten eine direkte Referenz auf SO? Kein Problem, hier ist ein gutes. Vergiss nicht, die Antwort zu verbessern. ;-)

+0

jersey-guice brücke hängt von guice 3.0 ab. Ich frage mich, ob es etwas gibt, das mit guice 4.0 funktioniert? – nagylzs