Есть ли способ заставить Guice сохранить аннотации? - PullRequest
1 голос
/ 02 апреля 2019

Я пытаюсь перебрать все классы, аннотированные интерфейсом Bar, инициализировать их с помощью Injector.createInstance Guice и зарегистрировать их на сервере Dropwizard Jersey.

Однако * 1005 Guice* Метод отбрасывает JAX-RS, а также пользовательские аннотации для каждого класса.По какой-то причине Guice сохраняет единственную аннотацию @MediaType.Аннотация @Path потеряна, что не позволяет Джерси правильно обрабатывать HTTP-запросы.

Есть ли способ заставить Guice сохранить все существующие аннотации для этих классов в собственной сгенерированной реализации?Обратите внимание, что инжектор не был настроен специально для обработки экземпляров Foo, но конструктор Foo помечен для внедрения.

1 Ответ

2 голосов
/ 02 апреля 2019

Guice не поддерживает это (пока)

У Guice есть открытый вопрос по этой теме в течение более 10 лет, и он не решен, и будетвероятно никогда не будет.

Единственный обходной путь - это использование аннотации @Inherited в ваших аннотациях.

Но вы упоминаете, что используете существующие, а не пользовательские аннотации, поэтомудавайте проверим их: @Consumes - это @Inherited (отлично!), и так же @Produces (также отлично!), но @Pathне (бух!), так что на самом деле @Path не присутствует на ваших прокси Guice.

Единственный совет, который я могу вам дать, это избавиться от вашего Guice-AOP (TypeListener).Если вы можете сделать это, то, скорее всего, у вас не будет никаких прокси-серверов Guice, и ваши методы будут находиться на верхнем объекте и поэтому будут видны Джерси.

...