Я пытаюсь @ Включить службу Guice в @ServerEndpoint. Я использую Tomcat 8.0.15 в качестве реализации JSR-356. Однако инъекция зависимостей не работает. Есть ли какая-либо дополнительная конфигурация, которая должна быть выполнена для того, чтобы включить инъекцию Guice? Обратите внимание, что я использую только стандартные аннотации javax.Tomcat8 WebSockets (JSR-356) с Guice 3.0
ответ
Я понял это. Конечная точка Websocket должна иметь настраиваемый конфигуратор, который создает и возвращает экземпляры с использованием экземпляра инжектора Guice.
Пример:
Пользовательского Guice контекст сервлета слушатель:
public class CustomServletContextListener extends GuiceServletContextListener {
public static Injector injector;
@Override
protected Injector getInjector() {
injector = Guice.createInjector(...);
return injector;
}
}
WebSockets пользовательского конфигуратор:
public class CustomConfigurator extends Configurator {
@Override
public <T> T getEndpointInstance(Class<T> clazz)
throws InstantiationException {
return CustomServletContextListener.injector.getInstance(clazz);
}
}
И затем в конечной точке WebSocket:
@ServerEndpoint(value = "/ws/sample_endpoint", configurator = CustomConfigurator.class)
public class SampleEndpoint {
private final SomeService service;
@Inject
public SampleEndpoint(SomeService service) {
this.service = service;
}
...
}
Строительство по собственному ответу Аритры:
Если честно, я не знаю точно, работает ли это с Guice 3.0, но он работает для 4.0, который является текущим стабильным выпуском.
Я думаю, что несколько чище подход изменить CustomConfigurator во что-то вроде этого:
public class CustomConfigurator extends Configurator {
@Inject
private static Injector injector;
public <T> T getEndpointInstance(Class<T> endpointClass) {
return injector.getInstance(endpointClass);
}
}
А потом от вашего расширенного ServletModule
класса configureServlets
метода, вызовите requestStaticInjection(CustomConfigurator.class)
Таким образом, вы не будете выдать инжектор всем. Я не знаю о вас, но это дает мне приятное и нечеткое чувство внутри, чтобы знать, что никто не сможет возиться со своим инжектором :-).
- 1. Включить JSR356 с прикладом
- 2. Guice 3.0 - Цель привязки конструктора?
- 3. Насколько стабилен Guice 3.0 Beta
- 4. Guice 3.0 - ArrayIndexOutOfBoundsException при запуске?
- 5. Ввод объектов с помощью Guice 3.0
- 6. аннотации сервлета 3.0 в сочетании с Guice
- 7. Как создать guice-3.0-no_aop.jar из источника guice
- 8. Guice 3.0 request.getRequestDispatcher (..) вперед предваряя путь Guice сервлет
- 9. JAX-WS Webservice в фреймворке GUICE 3.0
- 10. Guice 3.0 + Tomcat 7.0 = утечка памяти ClassLoader
- 11. замена guice 3.0 на 4.0 beta
- 12. WSO2 Application Server 5.1.0 - API-интерфейсы JSR356 API
- 13. Versioning REST API с помощью Guice 3.0 + JaxRS 2,0
- 14. Игнорировать подтверждение сертификата - Tomcat8 WebSocket (JSR-356)
- 15. Служба tomcat8 не запускалась с использованием сервиса tomcat8 start
- 16. Как использовать JPA с Tomcat8
- 17. Play 2.1 with Guice 3.0 - Доступ недоступна снаружи Класс контроллера
- 18. исключение интеграции Guice Guice
- 19. resteasy + tomcat servlet container 3.0 + guice not working
- 20. Как преобразовать String в класс в Google Guice 3.0
- 21. Клиент Arduino WebSockets с сервером PHP WebSockets
- 22. Missing каталог конф Tomcat8
- 23. Интеграция Tomcat8 & waffle
- 24. «Virtualhost» для Tomcat8
- 25. tomcat8 & eclipse mars nightmare
- 26. Docker tomcat8-jre8 взломан?
- 27. Tomcat8 SSL-запрос
- 28. Tomcat8 зависает при развертывании
- 29. Tomcat8 на OpenShift
- 30. Tomcat8 утечку памяти
«инъекция зависимости не работает» ... можете ли вы описать это более подробно? –
Я получаю исключение создания экземпляра, когда я пытаюсь выполнить инъекцию конструктора, используя @Inject внутри SeverEndpoint. – Aritra