Java 使用Guice的Jersey测试依赖注入

Java 使用Guice的Jersey测试依赖注入,java,jersey,guice,Java,Jersey,Guice,我无法将JerseyTest(v2.25)与Guice依赖项注入一起使用。我目前的设置是受另一个答案的启发。此设置仍试图通过HK2连接@提供的注释类的依赖关系,但我的测试用例失败。如果我从测试ResourceConfig中删除.packages()调用,那么监听器似乎根本没有初始化,我的测试用例都返回404 这是我当前的jersey测试设置: 公共类MyTestSuite扩展了JerseyTest{ @凌驾 受保护的应用程序配置(){ 返回新的ResourceConfig()包(“com.exa

我无法将JerseyTest(v2.25)与Guice依赖项注入一起使用。我目前的设置是受另一个答案的启发。此设置仍试图通过HK2连接
@提供的
注释类的依赖关系,但我的测试用例失败。如果我从测试
ResourceConfig
中删除
.packages()
调用,那么监听器似乎根本没有初始化,我的测试用例都返回404

这是我当前的jersey测试设置:

公共类MyTestSuite扩展了JerseyTest{
@凌驾
受保护的应用程序配置(){
返回新的ResourceConfig()包(“com.example.api”);
}
@凌驾
受保护的部署上下文配置部署(){
返回ServletDeploymentContext.builder(configure())
.addListener(GuiceConfig.class)
.addFilter(GuiceFilter.class,“GuiceFilter”)
.addFilter(ServletContainer.class,“jerseyFilter”,Collections.singletonMap(“javax.ws.rs.Application”,JerseyConfig.class.getName()))
.build();
}
}
以下是部署上下文中引用的类:

公共类GuiceConfig扩展了GuiceServletContextListener{
静态喷油器;
@凌驾
受保护的喷油器getInjector(){
injector=Guice.createInjector(新的WebModule());
回流式喷油器;
}
}
public类JerseyConfig扩展了ResourceConfig{
@注入
公共运动衫配置(ServiceLocator ServiceLocator){
注入器注入器=(注入器)serviceLocator.getService(ServletContext.class).getAttribute(注入器.class.getName());
getGuiceBridge().initializeGuiceBridge(serviceLocator);
serviceLocator.getService(GuiceIntoHK2Bridge.class).bridgeGuiceInjector(injector.createChildInjector(新的HK2IntoGuiceBridge(serviceLocator));
软件包(“com.example.api”);
}
}
公共类WebModule扩展了ServletModule{
@凌驾
受保护的void configureServlets(){
使用(ServletContainer.class,Collections.singletonMap(ServletProperties.JAXRS\u APPLICATION\u class,JerseyConfig.class.getName())提供(“/*”);
}
}

您可以使用现有库,而不是编写自己的库

您需要弥合两个DI框架之间的差距。本模块旨在通过启动基于Jetty的Jersey服务器并初始化HK2和Guice之间的网桥来实现这一点

入门

  • 将Jersey模块添加到Guice注入器

  • 配置包以扫描资源和要公开的端口

  • 获取JerseyServer实例并开始使用Restful资源

注意你失踪了


如何将
guice jersey
与jersey测试(内存)结合使用?
 compile 'io.logz:guice-jersey:1.0.8'
Injector injector = (Injector) servletContext.getAttribute(Injector.class.getName()); 
GuiceBridge.getGuiceBridge().initializeGuiceBridge(serviceLocator);
GuiceIntoHK2Bridge guiceBridge = serviceLocator.getService(GuiceIntoHK2Bridge.class);
guiceBridge.bridgeGuiceInjector(injector);