遵循Up and running on AppEngine with Maven, Jersey and Guice - Part 3中出色的分步说明,除了将对象注入到Jersey POJO中之外,我已经能够正常工作。
我与该配置的唯一区别在于,我还集成了Objectify,但这是可行的。
注入到TestClass
的HelloWorldServlet
实例(单例)可以工作,但是注入到TestClass
POJO的SecondTest
和RequestScoped
(HeyResource
)对象始终是null
。
我怀疑这应该归咎于HK2和Guice之间的互动,但这是我与Guice,Jersey和HK2的第一个项目,所以我全都在海上。
我的配置是:
平台:Win 7
GAE SDK 1.9.26
杰夫1.7.0_79
球衣:2.5.1
吉斯:4.0
客观化:5.1.7
HK2 Guice-bridge:2.2.0
Maven 3.3.3
最佳答案
使用Jersey 2,您不需要使用Guice 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>
关于java - Guice + Jersey集成注入(inject)空对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32449706/