Guice + Jersey集成注入空对象

mar*_*gti 0 java google-app-engine guice maven-3 jersey-2.0

按照Up和在MaE,Jersey和Guice的AppEngine上运行的优秀步骤- 第3部分,除了将对象注入Jersey POJO之外,我已经能够完成所有工作.

我从该配置中唯一的区别是我也集成了Objectify,但这是有效的.

TestClass注入到HelloWorldServlet工作中的实例(单例),但注入POJO 的TestClassSecondTest(RequestScoped)对象HeyResource总是如此null.

我怀疑HK2和Guice之间的互动应该归咎于此,但这是我与Guice , Jersey HK2的第一个项目,所以我都在海上.

我的配置是:

  • 平台:赢7
  • GAE SDK 1.9.26
  • Jave 1.7.0_79
  • 泽西岛:2.5.1
  • Guice:4.0
  • Objectify:5.1.7
  • HK2 Guice-bridge:2.2.0
  • Maven 3.3.3

Pau*_*tha 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您使用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>
Run Code Online (Sandbox Code Playgroud)