icy*_*sor 12 google-app-engine dependency-injection guice google-cloud-endpoints
因此,我想在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?
icy*_*sor 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);
}
}
Run Code Online (Sandbox Code Playgroud)
在ServletContextListener的Injector构造中包含此模块:
public class MyGSCL extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
return Guice.createInjector(new GuiceSSSModule(), new BaseModule());
}
}
Run Code Online (Sandbox Code Playgroud)
并在web.xml中使用此侦听器:
<listener>
<listener-class>de.mypkg.MyGSCL</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)
还要确保在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>
Run Code Online (Sandbox Code Playgroud)
您的端点将再次在/ _ah/api/...下可用,您可以在端点类中使用@Inject.
| 归档时间: |
|
| 查看次数: |
4169 次 |
| 最近记录: |