Автоматическое включение Jersey ContainerRequestContext в Spring bean

#spring #dependency-injection #jersey #inversion-of-control #hk2

#spring #внедрение зависимостей #джерси #инверсия управления #hk2

Вопрос:

У меня есть проект Jersey Spring, и я хотел бы получить некоторые данные, ContainerRequestContext не передавая ContainerRequestContext экземпляр полностью от контроллера к службе Spring нижнего уровня. Итак, есть ли какой-либо способ, которым я могу вводить / автоматически подключать ContainerRequestContext в Spring bean?

Или любые другие более правильные решения, которые отвечают требованиям, приветствуются.

Комментарии:

1. Доступ к нему в сервисе — плохая вещь, имхо, поскольку это связывает ваш уровень обслуживания с Интернетом. Вы должны заставить свой контроллер подготовить что-то для службы (нижний уровень) и не допустить, чтобы уровень ниже web зависел от web (или, что еще хуже, в данном случае imho) уровня инфраструктуры.

2. @M.Deinum полностью согласен с разделением веб-уровня и уровня обслуживания. У меня было решение сохранить данные запроса InheritableThreadLocal и получить их на других уровнях. Однако это решение не удалось бы, если мое приложение использует пул потоков. Я думаю, что это лучшее решение для меня, чтобы избежать добавления дополнительных параметров к каждому методу обслуживания в моем проекте

3. Почему бы просто не передать его методу? И почему это может привести к сбою, если вы используете пул потоков (именно так работают контейнеры сервлетов!). Если вы не выполняете никакой асинхронной обработки, все должно быть в порядке, но все же почему бы просто не передать его методу вместо того, чтобы полагаться на a ThreadLocal .

4. да, вы правы, пул потоков предназначен для асинхронной обработки. И я пытаюсь избежать добавления дополнительных параметров к каждому методу обслуживания в моем проекте.

5. Используете ли вы hk2-мост ( hk2.java.net/2.5.0-b24/spring-bridge.html ). Если это так, то вы можете в любое время добавить службу в Jersey hk2 ServiceLocator, и она также должна стать доступной для ввода из Spring