如何让泽西岛实例化和管理生命周期,让Guice进行注射

时间:2013-04-26 06:47:05

标签: java jersey guice guice-servlet

我已经参考了此链接以获取有关如何执行此操作的指南。 https://jersey.java.net/nonav/apidocs/latest/jersey/contribs/jersey-guice/com/sun/jersey/guice/spi/container/servlet/package-summary.html

我已经按照那里显示的内容 在web.xml中:

<listener>
  <listener-class>com.oocl.ir4.doc.common.servlet.GuiceServletConfig</listener-class>
</listener>
<filter>
  <filter-name>GuiceFilter</filter-name>
  <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>GuiceFilter</filter-name>
  <url-pattern>/rest/*</url-pattern>
</filter-mapping>

我的guice配置:

public class GuiceServletConfig extends GuiceServletContextListener {

  @Override
  protected Injector getInjector() {
    return Guice.createInjector(new JerseyServletModule() {

      @Override
      protected void configureServlets() {

        Map<String, String> params = new HashMap<String, String>();
        params.put(PackagesResourceConfig.PROPERTY_PACKAGES, "xxx.yyy");
        serve("/rest/*").with(GuiceContainer.class, params);
      }
    });
  }
}

下面的资源类实际上是由Jersey管理的,我不希望由Guice管理。它的包裹由泽西岛扫描,但未在Guice Config中进行扫描:

package xxx.zzz;

@Path("/xxx/zzz")
public class AbcResource extends Resource {

@Inject
  private AbcServiceImpl abcService;

...
}

我希望Guice注入资源的课程:

package xxx.yyy;

@Singleton
public class AbcServiceImpl {
...
}

然而,它不起作用。当我访问AbcResource中的abcServiceImpl时发生NullPointerException

任何人都有任何关于为什么或如何检查Guice容器维护的内容的提示,以便我可以检查它?

1 个答案:

答案 0 :(得分:0)

如果你希望Guice在AbcResource中注入成员,你将需要Guice来管理这个类。我怀疑你需要添加:

bind(AbcResource.class);

到您的ConfigureServlets方法。这不会干扰泽西岛执行的任何对象管理。