2016-06-21 5 views
2

Я использую Guice в качестве рамки для инъекций зависимостей. Я хотел бы добавить что-то, что облегчит создание служб REST.Guice with JAX-RS

Я посмотрел на guice-servlet, и он хорошо работает для направления путей к HTTP-сервлетам, но это все, что он делает, я ожидал, что синтаксис JAX-RS, такой как аннотация, будет работать, но он не ,

На самом деле я не использовал JAX-RS. Я столкнулся с ошибкой, и кажется, что Джерси является эталонной реализацией для этого, но похоже, что использует собственную инфраструктуру инъекций зависимостей и не работает с Guice. Кроме того, он имеет 5 + МБ зависимостей, которые кажутся много для того, за чем я работаю.

Is Guice разработан таким образом, что он не поддается JAX-RS, если да, то что еще я должен делать?

+0

Вы нашли какие-либо сообщения, которые показывают, как интегрировать две рамки DI? Вы не можете полностью избавиться от HK2 (внутренние рамки DIY), потому что Джерси использует его повсюду для своей инфраструктуры. Но есть способы интегрировать его с Guice. Я ответил на несколько из этих сообщений. Единственные проблемы, которые я вижу при осуществлении этой интеграции, - это когда люди используют Google App Engine. Я не использую GAE, поэтому я никогда не мог исследовать проблему. –

+1

@peeskillet - мой вопрос не вокруг guice-jersey per say, больше, если я поступаю правильно или нет ... это то, что я ожидал бы очень легко, и я не ожидал бы монолитная зависимость - для меня подняли красные флаги, поэтому вопросы. – Cheetah

+1

Я сделал Guice + Jersey в нескольких приложениях, и я очень доволен этим! Так что да, я бы сказал, что это правильно. – Jorn

ответ

4

Я думаю, что, возможно, guice-servlet модуль ввел вас в заблуждение. Guice - это основа DI. Период. Реальная цель модуля guice-servlet не предоставляет декларации ярлыка сервлета и фильтра, но дает поддержку для специальных областей запрос и сеанс. Эти симпатичные объявления shorcut являются синтаксическим сахаром.

Выбор реализации JAX-RS в Java немного исключается. У вас есть несколько вариантов (Jersey, Resteasy, Spring ...). Если вы собираетесь заполнять JavaEE, вам не нужно выбирать. Вы просто используете аннотации (и DI) из коробки.

Если вы не используете сервер JavaEE (просто веб-сервер, например Tomcat или любую другую причудливую вещь, например, приложение для Android), вы должны выбрать свою реализацию. Если вы также используете DI (который я рекомендую), тогда есть еще одно решение.

Таким образом, вы не используете JavaEE и хотите реализовать некоторый REST API с использованием JAX-RS и инъекции зависимостей. Вы проводите некоторые исследования и в конечном итоге выбираете Джерси и Guice. Хороший выбор, я тоже выбрал те, что были в моих последних проектах. Да, график зависимости Джерси немного вздувается. Я знаю, это может быть лучше.

Теперь ваша проблема заключается в том, как заставить ее работать вместе, потому что Джерси использует собственный каркас DI (HK2), который является плохой вещью.

У вас есть много ссылок на SO о интеграции Jersey-Guice. Ваш лучший выбор - Guice HK2 bridge.

Что? Вам нужна прямая ссылка на SO? Нет проблем, вот хороший. Не забудьте подтвердить ответ. ;-)

+0

джерси-гусиный мост зависит от вида 3.0. Интересно, есть ли что-то, что работает с guice 4.0? – nagylzs

Смежные вопросы