首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于Guice的泽西测试依赖注入

基于Guice的泽西测试依赖注入
EN

Stack Overflow用户
提问于 2019-07-03 14:14:18
回答 1查看 1.1K关注 0票数 4

我无法使用JerseyTest (v2.25)和Guice依赖项注入。我目前的设置是由另一个堆栈过流问题上的一个答案所启发的。此设置仍然试图通过@Provides通过HK2连接带注释的类的依赖关系,从而失败了测试用例。如果我将.packages()调用从测试ResourceConfig中删除,那么侦听器似乎根本没有初始化,而且我的测试用例都返回了404。

这是我目前的运动衫测试装置:

代码语言:javascript
运行
复制
public class MyTestSuite extends JerseyTest {

    @Override
    protected Application configure() {
        return new ResourceConfig().packages("com.example.api");
    }

    @Override
    protected DeploymentContext configureDeployment() {
        return ServletDeploymentContext.builder(configure())
                .addListener(GuiceConfig.class)
                .addFilter(GuiceFilter.class, "guiceFilter")
                .addFilter(ServletContainer.class, "jerseyFilter", Collections.singletonMap("javax.ws.rs.Application", JerseyConfig.class.getName()))
                .build();
    }
}

下面是在部署上下文中引用的类:

代码语言:javascript
运行
复制
public class GuiceConfig extends GuiceServletContextListener {
    static Injector injector;

    @Override
    protected Injector getInjector() {
        injector = Guice.createInjector(new WebModule());
        return injector;
    }
}
代码语言:javascript
运行
复制
public class JerseyConfig extends ResourceConfig {

    @Inject
    public JerseyConfig(ServiceLocator serviceLocator) {
        Injector injector = (Injector) serviceLocator.getService(ServletContext.class).getAttribute(Injector.class.getName());
        GuiceBridge.getGuiceBridge().initializeGuiceBridge(serviceLocator);
        serviceLocator.getService(GuiceIntoHK2Bridge.class).bridgeGuiceInjector(injector.createChildInjector(new HK2IntoGuiceBridge(serviceLocator)));
        packages("com.example.api");
    }
}
代码语言:javascript
运行
复制
public class WebModule extends ServletModule {

    @Override
    protected void configureServlets() {
        serve("/*").with(ServletContainer.class, Collections.singletonMap(ServletProperties.JAXRS_APPLICATION_CLASS, JerseyConfig.class.getName()));
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-07-07 03:37:57

与编写自己的库不同,您可以使用现有的库泽西岛客舱

您需要弥合两个DI框架之间的差距。这个模块的目的就是通过引导基于Jetty的泽西服务器并初始化HK2和Guice之间的桥来实现这一点。 入门

  • 将JerseyModule添加到Guice喷射器中
  • 配置包以扫描要公开的资源和端口
  • 获取JerseyServer实例并开始使用您的Restful资源
代码语言:javascript
运行
复制
 compile 'io.logz:guice-jersey:1.0.8'

注意您丢失了GuiceIntoHK2Bridge

注射器=(注射器) servletContext.getAttribute(Injector.class.getName());GuiceBridge.getGuiceBridge().initializeGuiceBridge(serviceLocator);GuiceIntoHK2Bridge guiceBridge = serviceLocator.getService(GuiceIntoHK2Bridge.class);guiceBridge.bridgeGuiceInjector(注射器);

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56872093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档