У меня есть проект, основанный на технологии Jersey 2, Guice 3.0. Поскольку каркас Jersey 2 использует HK2, мне пришлось настроить мост HK2-Guice.Как настроить HK2 для использования аннотации Guice @Inject из пакета com.google.inject?
JerseyGuiceServletContextListener:
package com.example.core;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.servlet.GuiceServletContextListener;
import com.google.inject.servlet.ServletModule;
public class JerseyGuiceServletContextListener extends GuiceServletContextListener {
static Injector injector;
@Override
protected Injector getInjector() {
injector = Guice.createInjector(new ServletModule() {
@Override
protected void configureServlets() {
//some code here
}
});
return injector;
}
}
JerseyConfiguration:
package com.example.core;
import org.glassfish.hk2.api.ServiceLocator;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.ServerProperties;
import org.jvnet.hk2.guice.bridge.api.GuiceBridge;
import org.jvnet.hk2.guice.bridge.api.GuiceIntoHK2Bridge;
import javax.inject.Inject;
//...
class JerseyConfiguration extends ResourceConfig {
@Inject
public JerseyConfiguration(ServiceLocator serviceLocator) {
packages("com.example.ws");
GuiceBridge.getGuiceBridge().initializeGuiceBridge(serviceLocator);
GuiceIntoHK2Bridge guiceBridge = serviceLocator.getService(GuiceIntoHK2Bridge.class);
guiceBridge.bridgeGuiceInjector(JerseyGuiceServletContextListener.injector);
}
}
Все работает отлично, если я впрыснуть некоторые свойства класса, используя javax.inject.Inject
аннотацию. Но когда я использую аннотацию com.google.inject.Inject
, мои свойства класса не вводятся. & Я получаю исключение NullPointerException, когда пытаюсь использовать это свойство.
Как я могу использовать аннотацию com.google.inject.Inject
?
Более подробную информацию о InjectionResolvers можно найти здесь: https://hk2.java.net/2.5.0-b08/extensibility.html#Custom_Injection_Resolvers – jwells131313
Но, как я определил мост hk2-guice - я не могу использовать только аннотации Google, как они есть? Без InjectionResolver impl. – Alexiuscrow
Мост позволяет Guice видеть сервисы HK2 и HK2, чтобы увидеть услуги Guice. InjectionResolver позволит вам использовать аннотации Guice в сервисах, созданных HK2 (это должно быть то, что происходит в вашем примере) – jwells131313