首页 文章

使用Google Cloud Endpoints和Guice进行播放

提问于
浏览
12

因此,我想在Appengine中使用Guice和Cloud Endpoints来注入我的服务或者daos - 我猜这很常见,但我没有找到这方面的教程 .

官方Guice for Appengine文档似乎在这里:https://github.com/google/guice/wiki/GoogleAppEngine

配置Guice时,您需要设置com.google.inject.servlet.GuiceFilter来拦截每个请求“/ *” . 在某些时候,您必须初始化模块 . 就像文档说的那样,一个好的地方就是ServletContextListener .

一种特殊的模块是ServletModules,它将请求路径映射到Servlet-Classes,而不是在web.xml中执行此操作,您现在可以通过编程方式执行此操作 .

非常直接,直到这里 . 但是如何配置Guice还包括Endpoint-Class?

1 回答

  • 26

    事实证明,有一个GuiceSystemServiceServletModule可以处理这个问题 .

    public class GuiceSSSModule extends GuiceSystemServiceServletModule {
    
      @Override
      protected void configureServlets() {
        super.configureServlets();
    
        Set<Class<?>> serviceClasses = new HashSet<Class<?>>();
        serviceClasses.add(MyEndpoint.class);
        serviceClasses.add(AnotherAndpoint.class);
        this.serveGuiceSystemServiceServlet("/_ah/spi/*", serviceClasses);
      }
    }
    

    在ServletContextListener的Injector构造中包含此模块:

    public class MyGSCL extends GuiceServletContextListener {
    
      @Override
      protected Injector getInjector() {
        return Guice.createInjector(new GuiceSSSModule(), new BaseModule());
      }
    }
    

    并在web.xml中使用此侦听器:

    <listener>
       <listener-class>de.mypkg.MyGSCL</listener-class>
    </listener>
    

    还要确保在web.xml中包含Guice过滤器:

    <!-- GUICE -->
    <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>
    

    您的 endpoints 将再次在/ _ah / api / ...下可用,您可以在 endpoints 类中使用@Inject .

相关问题