我一直在使用 Jersey 1.X 和 Google Guice 进行依赖注入。切换到 Jersey 2.X 似乎意味着您需要使用 HK2 进行依赖注入,我正在努力寻找我在 Guice 中拥有的一些东西。
在带有 Guice 的 Jersey 1.X 中,我会为应用程序提供类似的内容:
public class GuiceServletTestConfig extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
return Guice.createInjector(new ServletModule(){
@Override
protected void configureServlets(){
bind(MyResource.class);
serve("/*").with(GuiceContainer.class);
bind(MyDAO.class).to(MyDAOSQL.class)
}
});
}
}
像这样的测试:
public class GuiceServletTestConfig extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
return Guice.createInjector(new ServletModule(){
@Override
protected void configureServlets(){
bind(MyResource.class);
serve("/*").with(GuiceContainer.class);
}
@Provides
MyDAO provideMockMyDAO(){
MyDAO dao = mock(MyDAO.class);
return dao;
}
});
}
}
我的任何资源都看起来像这样:
@Path("myresource")
public class MyResource {
private MyDAO myDAO;
@Inject
protected void setMyDAO(MyDAO myDAO) {
this.myDAO = myDAO;
}
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response get() {
// Do something with myDAO
// Return response
}
}
那就是我可以为我的测试定义模拟,一切都很好。
但是,对于 Jersey 2.X,我找不到 @Provides 注释的任何等效项。MyResource 实际上是相同的。对于真实应用程序的依赖注入,我有:
public class Application extends ResourceConfig {
public Application() {
packages("com.my.package.resources");
register(new AbstractBinder() {
@Override
protected void configure() {
bind(MyDAOSQL.class).to(MyDAO.class);
}
});
}
}
但我不知道如何为测试提供模拟。有人知道怎么做吗?