具有弹簧依赖注入的GWT

时间:2009-05-22 05:04:22

标签: spring gwt

我用谷歌搜索但找不到任何答案。

我打算使用GWT。我想知道我是否可以在GWT代码中使用spring来使用依赖注入框架?我不是在谈论GWT gui与后端spring app的交互。

我问的原因是GWT代码被编译为JavaScript,这是在浏览器中执行的。如果我在那里使用spring代码,那么它是否可以工作或者其他任何其他库如log4j等?

或者GUI代码必须只是纯GWT API?

例如,

public class MyTable {
   private Button myButton;
   @Autowired
   public MyTable(Button aMyButton) {
      myButton = aMyButton;
   }
}

6 个答案:

答案 0 :(得分:18)

使用GIN在GWT上支持Guice。对于使用GWT的类似Spring的DI,请查看GWT ToolboxRocket GWT

我相信GIN是GWT更自然的选择。不是因为它也是由Google制作的,而是因为使用XML进行GWT配置绝对没有意义。所有东西都被静态编译成JavaScript,因此不需要外部化配置。保持您的重构工具愉快;去找GIN。

要回答您的其他问题,您将找不到许多适用于GWT的SE框架。首先,它不支持反射或字节码操作(一切都是JavaScript),它立即排除了很多框架。另一方面,Log4j没有意义,因为客户端没有可访问的文件系统,但有libraries可用的方式不同。

上面提到的用于GWT的Spring库基本上是对GWT的Spring的重写。他们不与Spring共享任何代码只是因为他们不能。这些框架通过生成代码(“工厂”)来工作,这些代码就像您手动执行DI一样连接组件。

这也是GIN的工作原理,它为您的类生成Java工厂,GWT将其编译为优化的JavaScript(意味着性能开销很小)。 GIN确实在幕后使用Guice,在编译时验证配置并检查模块。

答案 1 :(得分:3)

不,你将无法做到这一点。 DI逻辑在运行时应用于服务器端,GWT代码完全是客户端的。

答案 2 :(得分:3)

我认为创建一个调用GWT RemoteServlet的doPost方法的Spring Controller会更简单。提供了一个示例here。我知道这有点圆了。但这可以保护你免受GWT实施的改变,如果有的话。希望它有所帮助。

答案 3 :(得分:1)

我想知道GWT是否支持Guice(Google DI框架)?

这可能是另一种选择。

答案 4 :(得分:1)

您可以在服务器端实现一个Servlet服务,它从Spring ApplicationContext中检索对象,通过示例呈现给JSon Objects(我用http://json-lib.sourceforge.net/apidocs/net/sf/json/JSONSerializer.html完成)。 然后,您可以拥有一个Singleton Facade Service,它将请求从GWT客户端发送到我们的Servlet服务。

通过这种方式,您可以在GWT客户端获得运行时依赖注入。

答案 5 :(得分:0)

Spring ME能够帮助你。虽然我部分同意之前的一些回复,但在客户端和服务器代码中使用相同的编程(和管道)范例是很好的。