我希望能够使用 guice/gin 实现以下目标:
- 从服务器获取各种常量(用户设置、语言等)
- 将这些常量绑定(bind)到 guice/gin 模块中的“Named(###)”
- 将它们注入(inject)到我的代码中的构造函数中,这些构造函数仅在我初始化上述 2 个步骤后才会被调用。
我可以以某种方式做到这一点吗?如果是这样,怎么办?
最佳答案
基本上有两种方法可以将数据从服务器获取到应用程序:要么进行 RPC,要么在初始页面加载中设置一些全局 Javascript 变量。
假设这些是相对简单的常量,不需要在服务器上进行大量计算,那么最好的选择可能是将它们包含在页面加载中(即引导 GWT 应用程序的 HTML 页面中)。例如,您的页面可能如下所示:
<html>
<head>
...
<!-- This block would be generated by your server-side templating system -->
<script>
var globalFoo = 1234;
</script>
...
</head>
<body>
...
然后在您的客户端中,您可以拥有一个带有如下代码片段的 Gin 模块:
@Provides
@Foo int providesFoo() {
return getNativeFoo();
}
// Use JSNI to get the global Javascript variable.
private static native int getNativeFoo() /*-{
return globalFoo;
}-*/;
这仍然要求您对所有绑定(bind)注释进行硬编码(即使您使用的是@Named
注释)。在 Gin 中,没有办法解决这个问题;所有绑定(bind)都需要在 GWT 编译时已知。
如果您要采用基于 RPC 的方法,那么使用 Gin 不会提供太多帮助。相反,您可能希望在 RPC 之前构建对象,监听 RPC 响应,然后根据响应进行更新。
希望能回答您的问题。
关于java - Google Guice 中的计算常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11120711/