#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