[英]Appengine with Google Cloud Endpoints and Guice
因此,我想在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?
事實證明,有一個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>
您的端點將再次在/ _ah / api / ...下可用,您可以在端點類中使用@Inject。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.