遵循Up and running on AppEngine with Maven, Jersey and Guice - Part 3中出色的分步说明,除了将对象注入到Jersey POJO中之外,我已经能够正常工作。

我与该配置的唯一区别在于,我还集成了Objectify,但这是可行的。

注入到TestClassHelloWorldServlet实例(单例)可以工作,但是注入到TestClass POJO的SecondTestRequestScopedHeyResource)对象始终是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/

10-11 13:19