【发布时间】:2013-09-29 02:43:38
【问题描述】:
我最近切换到两阶段注入,这在我的 servlet 绑定中产生了错误。我目前在两种错误模式之间切换,不确定哪个方向最好。
我遇到的第一个错误是:
com.sun.jersey.api.container.ContainerException:资源配置 实例不包含任何根资源类。
我的 servlet 模块如下所示:
public class MyServletModule extends JerseyServletModule {
@Override
protected void configureServlets() {
bind(MyServlet.class).asEagerSingleton();
serve("/*").with(GuiceContainer.class);
}
}
我能够通过显式提供 com.sun.jersey.config.property.packages 参数来消除此错误。
public class MyServletModule extends JerseyServletModule {
@Override
protected void configureServlets() {
bind(MyServlet.class).asEagerSingleton();
Map<String,String> parameters = new HashMap<String, String>();
parameters.put(PackagesResourceConfig.PROPERTY_PACKAGES, MyServlet.class.getPackage().getName());
serve("/*").with(GuiceContainer.class, parameters);
}
}
但是当我这样做时,Guice 会尝试一个 Just in Time 绑定,它不尊重我的 servlet 构造函数上的 @Inject。
com.google.inject.ConfigurationException:Guice 配置错误:
1) 无法为 MyServlet 创建绑定。已经配置好了 在一个或多个子注入器或私有模块上 绑定在 MyServletModule.configureServlets(MyServletModule.java:44) 如果是 在 PrivateModule 中,您是否忘记公开绑定?尽管 定位 MyServlet
1 处错误 com.google.inject.internal.InjectorImpl.getBinding(InjectorImpl.java:150)
我的 servlet 有一个 @Inject 构造函数,它的参数不能及时绑定。在调试到 InjectorImpl 之后,我相信这就是我使用 PROPERTY_PACKAGES 时失败的原因。
我只是不确定使用 PROPERTY_PACKAGES 是否正确,我需要修复一些绑定?或者,如果这是错误的方向,我需要以不同的方式修复原始 ResourceConfig 错误。
感谢您向正确方向提供帮助或推动。
【问题讨论】:
标签: java servlets jersey guice