我想使用自定义的com.google.api.server.spi.config.Authenticator来保护Google云端点。 看这篇文章(here)。 例如,通过facebook oauth进行身份验证。 Authenticator必须有一个没有任何参数的默认构造函数,否则Authenticator不起作用。所以构造函数注入不可能像这样:
@Inject
public apiMethod(Log logger, Datastore datastore, MemCacheManager cacheManager) {
this.logger = logger;
this.datastore = datastore;
this.cacheManager = cacheManager;
}
我想在Authenticator中缓存一些数据。所以我需要一个memcachemanager实例和日志记录器。有没有人知道如何在没有构造函数注入的情况下完成注入?
谢谢! Smilingm
答案 0 :(得分:1)
我不了解Google Cloud Endpoints,但我确实知道Guice。我怀疑你不会得到你想要的答案,所以我会快速总结一下我所知道的。
最终,调用Authenticator
的代码需要自己注入或者可以访问注入器,并知道在实例化之后调用Injector.injectMembers(yourAuthenticator)
(可能是使用no-arg构造函数)您需要提供)或通过从Authenticator
注入或请求Injector
来构建您的Authenticator
。
鉴于您的@ApiMethod
需要具有特定的构造函数签名,调用者似乎很可能不在此处使用注入,但this page暗示使用@Inject private Log logger;
@Inject private Datastore datastore;
@Inject private MemCacheManager cacheManager;
注释的方法可以注入了命名参数,所以它可能会起作用。您可以通过尝试现场注入来快速测试:
Injector
如果这不起作用,那么是时候发牢骚了。如果Google支持他们自己的DI框架,那就太好了。 DI仅在完整堆栈支持时才起作用。如果您的入口点不使用注入,那么您将被迫采取其他措施,例如将Authenticator
置于全局单例({3}}中,或自行构建依赖项。有时这种痛苦是不可避免的。
编辑:确实听起来在Authenticator
实例化后没有发生Guice注入,你的tell application "Reminders"
if exists (reminders whose name is Erinnerung) then
else
set newremin to make new reminder
set name of newremin to Erinnerung
end if
end tell
只能选择从静态范围获取其依赖项或直接构建它们。你将无法使用Guice。