Dependency injection 在Google云端点上的自定义验证器中使用Guice注入

Dependency injection 在Google云端点上的自定义验证器中使用Guice注入,dependency-injection,oauth-2.0,guice,facebook-login,google-cloud-endpoints,Dependency Injection,Oauth 2.0,Guice,Facebook Login,Google Cloud Endpoints,我想使用自定义com.google.api.server.spi.config.Authenticator保护google云端点。 请参阅此帖子()。 例如,通过facebook oauth进行身份验证。 验证器必须具有没有任何参数的默认构造函数,否则验证器无法工作。因此,构造函数注入不可能像这样: @Inject public apiMethod(Log logger, Datastore datastore, MemCacheManager cacheManager) { t

我想使用自定义com.google.api.server.spi.config.Authenticator保护google云端点。 请参阅此帖子()。 例如,通过facebook oauth进行身份验证。 验证器必须具有没有任何参数的默认构造函数,否则验证器无法工作。因此,构造函数注入不可能像这样:

@Inject
public apiMethod(Log logger, Datastore datastore, MemCacheManager cacheManager) {
        this.logger = logger;
        this.datastore = datastore;
        this.cacheManager = cacheManager;
}
我想在验证器中缓存一些数据。所以我需要一个memcachemanager实例和日志记录器。有人知道如何在没有构造函数注入的情况下进行注入吗

谢谢!
Smilingm

我不知道谷歌云端点,但我知道Guice。我怀疑你不会在这里得到你想要的答案,所以我将提供一个我所知道的快速综述

最终,调用
验证器的代码需要注入自身或访问注入器,并且在实例化后知道调用
injector.injectMembers(您的验证器)
(可能不需要提供参数构造函数)或者通过注入或从
注入器请求来构造
验证器

考虑到您的
验证器
需要有一个特定的构造函数签名,调用方很可能没有在这里使用注入,但这意味着使用
@ApiMethod
注释的方法可以注入命名参数,因此它可能会起作用。您可以通过尝试现场注入来快速测试这一点:

@Inject private Log logger;
@Inject private Datastore datastore;
@Inject private MemCacheManager cacheManager;
如果这不起作用,那就是抱怨的时候了。如果谷歌在这里支持他们自己的DI框架那就太好了。DI只有在整个堆栈支持的情况下才能工作。如果您的入口点不使用注入,那么您将被迫采取其他措施,例如将
注入器
放入全局单例,也就是说,或者自己构建依赖项。有时这种痛苦是不可避免的


编辑:因为听起来确实在实例化
验证器之后没有发生Guice注入,所以您的
验证器将只能选择从静态范围获取其依赖项或直接构造它们。您将无法使用Guice。

您是否找到了解决方案?我也面临同样的问题。不,我没有。我制作了如下内容:@ApiMethod public ApiMethod(日志记录器、数据存储数据存储、MemCacheManager cacheManager){User-User=facebook-authenticator.authenticate(请求、pUser、记录器、cacheManager);}