遵循Up and running on AppEngine with Maven, Jersey and Guice - Part 3中给出的优秀分步,除了将对象注入Jersey POJO之外,我已经能够完成所有工作。
我与该配置的唯一区别在于我还集成了Objectify,但这是有效的。
注入TestClass
的{{1}}实例(单例)有效,但HelloWorldServlet
和TestClass
(SecondTest
)对象注入{{1} POJO总是RequestScoped
。
我怀疑HK2和Guice之间的互动应该归咎于此,但这是我与Guice 和 Jersey 和 HK2的第一个项目,所以我都在海上
我的配置是:
答案 0 :(得分:5)
使用Jersey 2,您不需要像使用Jersey 1那样使用Guice Web包装器。您已经拥有guice-bridge
,您只需要在Jersey配置中使用HK2进行配置。请参阅The Guice/HK2 Bridge。
你基本上需要在HK2的ServiceLocator
上获得一个句柄来绑定这两个框架。 Jersey允许您在应用程序的许多位置注入定位器。您最需要的地方是配置类(即ResourceConfig
)。以下是如何配置它的示例。
public class JerseyConfig extends ResourceConfig {
@Inject
public JerseyConfig(ServiceLocator locator) {
packages("your.packages.to.scan");
GuiceBridge.getGuiceBridge().initializeGuiceBridge(locator);
// add your Guice modules.
Injector injector = Guice.createInjector(new GuiceModule());
GuiceIntoHK2Bridge guiceBridge = locator.getService(GuiceIntoHK2Bridge.class);
guiceBridge.bridgeGuiceInjector(injector);
}
}
如果您使用web.xml配置应用程序,可以使用init-param将此类添加到配置中
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.stackoverflow.jersey.JerseyConfig</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>