一种AbstractModule
是吉斯的自举(配置)相的基本构建块。你总是需要一个或多个。另一方面,ServletModule
是一个专门的,它为你做一些配置,因为它运行在一个servlet容器中。
从Guice documentation:
此模块建立请求和会话范围,并提供了一个 的地方,从配置过滤器和servlet。
关于Guice-Jersey集成,您当然需要设置它。它不会工作。与任何其他依赖注入框架一样,Guice在时有效,它可以控制构建对象。如果有疑问,问问自己是谁创造了这个物体。
使用Jersey和JAX-RS来创建对象吗?不是你,你只是定义它们。容器创建它们。 JAX-RS运行时。在你的情况下,泽西运行时。泽西岛内部使用HK2依赖注入框架。所以你需要桥这两个框架,以注入一个JAX-RS类,你已经定义了一些Guice资源。或者相反!这就是为什么有一个HK2-guice bridge。所以泽西岛将使用HK2建造你的物体,HK2也会借助桥梁在Guice上查找你的资源。
一个简单的例子。 I use this code初始化一个REST API,我想注入Guice资源。
@ApplicationPath("api")
public class ApiRest extends ResourceConfig {
private static final Logger log = LoggerFactory.getLogger(ApiRest.class);
@Inject
public ApiRest(ServiceLocator serviceLocator, ServletContext servletContext) {
log.debug("Inicialitzant Jersey.");
packages("net.sargue.app.api");
GuiceBridge.getGuiceBridge().initializeGuiceBridge(serviceLocator);
GuiceIntoHK2Bridge guiceBridge = serviceLocator.getService(GuiceIntoHK2Bridge.class);
Injector injector = (Injector) servletContext.getAttribute(Injector.class.getName());
if (injector == null)
throw new RuntimeException("Guice Injector not found");
guiceBridge.bridgeGuiceInjector(injector);
}
}
请注意,上面的例子中所需要的ServletModule
注册为它拉从ServletContext
的吉斯注射器。或者您可以将注射器添加到其他地方的ServletContext
。或者在初始化REST API时创建注入器,这取决于您的首选项和应用程序。
thx现在看起来更清楚了;所以基本上,例如,jax-rs资源(端点)由HK2在内部创建,我的工作是告诉jax-rs使用guice创建它们。顺便说一句你有任何集成的工作示例?昨天我尝试了我在网上找到的每一个人,没有人帮助我..仍空指针 – azalut
更新了一个例子。不,HK2仍在创建对象,但现在它不仅在注册表中查找资源,而且还在Guice上查找资源。现在希望它更清楚。 – sargue