1

大家好,我的问题。一个 GWT 项目,因为我已经阅读了 Gin,我只能在客户端使用,而不是 Guice 在服务器端可用。这是我的问题。

让我们先发布一些示例代码。

服务器端。

public class WebchargeServiceImpl extends RemoteServiceServlet implements WebchargeService
{
@Inject
private Injector injector;
@Inject
private ExecuteOperations executeOperations;

.....
executeOperations.do(); ....

这是注入的类 ExecuteOperations

@Singleton
public class ExecuteOperations
{
.........
}

我也有servlet模块类

public class SampleWebGuiceServletConfig extends GuiceServletContextListener
{
@Override
protected Injector getInjector()
{
  return Guice.createInjector(Stage.DEVELOPMENT, new SampleWebModule());
}

} // class

......

public class SampleWebModule extends ServletModule
{

    @Override
    protected void configureServlets()
    {
       bind(WebchargeServiceImpl.class);  //is it correct to bind a class like that?
    } // class

web.xml

  <servlet>
        <servlet-name>.......WebchargeService</servlet-name>
        <servlet-class>.....WebchargeServiceImpl</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>.........WebchargeService</servlet-name>
        <url-pattern>/Webcharge/WebchargeService</url-pattern>
    </servlet-mapping>
    <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>/*</url-pattern>
    </filter-mapping>

    <listener>
        <listener-class>......SampleWebGuiceServletConfig</listener-class>
    </listener>
</web-app>

我错过了一些东西,因为我每次都得到 null,这段代码在 servlet/jsp env 中工作正常,但在这里......建议的地方。

谢谢。

4

2 回答 2

5

您必须将您的WebchargeServiceImplservlet 映射到您的SampleWebModule而不是您的web.xml; 否则它将由您的 servlet 容器而不是由 Guice 构建,因此它不会被“注入”。

于 2011-06-03T14:43:50.530 回答
1

您的 servlet 如何被实例化?您是否安装了Guice Servlet 过滤器

于 2011-06-03T14:35:34.193 回答