java - Google Guice 中的计算常量

标签 java gwt dependency-injection guice gwt-gin

我希望能够使用 guice/gin 实现以下目标:

  1. 从服务器获取各种常量(用户设置、语言等)
  2. 将这些常量绑定(bind)到 guice/gin 模块中的“Named(###)”
  3. 将它们注入(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/

相关文章:

java - 如何在java android中对数字进行排序?

css - 新的 GWT 2.4 DataGrid——不是样式——注释错误?

c# - 使用 DI 的单一方法委托(delegate) vs 接口(interface)

java - GXT 3 更改选项卡样式(添加 css)

java - Android Dagger 报错找不到符号类 DaggerDashboardComponent

c# - 如何将 Fluent MEF 注入(inject) WCF

java - 以 '0' 结尾的浮点值不能用两位小数表示

java - 如何设置 Spring Security 以允许来自特定应用程序的 REST 调用?

java - 自底向上归并排序的实现中是否存在可能的勘误表

java - 启用 GZIP 是 GWT 应用程序