我最近切换到两阶段注入,这在我的 servlet 绑定中产生了错误。我目前在两种错误模式之间切换,不确定哪个方向最好。
我遇到的第一个错误是:
com.sun.jersey.api.container.ContainerException:ResourceConfig 实例不包含任何根资源类。
我的 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 时
com.google.inject.internal.InjectorImpl.getBinding(InjectorImpl.java:150) 出现 1 个错误
我的 servlet 有一个 @Inject 构造函数,它的参数不能及时绑定。在调试到 InjectorImpl 之后,我相信这就是我使用 PROPERTY_PACKAGES 时失败的原因。
我只是不确定使用 PROPERTY_PACKAGES 是否正确,我需要修复一些绑定?或者,如果这是错误的方向,我需要以不同的方式修复原始 ResourceConfig 错误。
帮助或推动正确的方向表示赞赏。