GWT与Spring依赖注入

9

我搜索了一下,但没有找到任何答案。

我计划使用GWT。我想知道是否可以在我的GWT代码中使用spring来使用依赖注入框架?我不是指GWT GUI与后端spring应用程序的交互。

我问这个问题的原因是GWT代码会被编译成JavaScript,并在浏览器中执行。如果我在其中使用spring代码,那么它能工作吗?或者其他库像log4j等呢?

还是GUI代码必须是纯GWT API?

例如,

public class MyTable {
   private Button myButton;
   @Autowired
   public MyTable(Button aMyButton) {
      myButton = aMyButton;
   }
}
6个回答

18

使用GIN,Guice在GWT上得到了支持。要在GWT中进行类似于Spring的DI,请查看GWT ToolboxRocket GWT

我认为GIN是GWT的更自然选择。这不是因为它也是由Google制作的,而是因为在GWT配置中使用XML毫无意义。一切都被静态编译成JavaScript,因此没有必要进行外部化配置。让您的重构工具保持愉快;选择GIN吧。

回答您的另一个问题,您将找不到许多适用于GWT的SE框架。首先,它不支持反射或字节码操作(一切都是JavaScript),这立即排除了许多框架。另一方面,Log4j无法使用,因为客户端上没有文件系统可访问,但是有可用的库可以以不同的方式完成任务。

上面提到的适用于GWT的Spring库基本上是Spring for GWT的重写。它们不与Spring共享任何代码,因为它们无法这样做。这些框架通过生成代码(“工厂”)来工作,以自动完成组件的连接,就好像您手动进行DI一样。

GIN也是这样工作的,它为您的类生成Java工厂,并将其编译成优化的JavaScript(这意味着几乎没有性能开销)。但是,GIN在幕后确实使用了Guice,以在编译时验证配置并检查模块。


3

不,你不能这样做。依赖注入逻辑应用于服务器端的运行时,而GWT代码完全是客户端的。


3

我认为创建一个Spring控制器来调用GWT RemoteServlet的doPost方法会更简单。这里提供了一个示例(链接)。我知道这有点绕,但是如果GWT实现有任何变化,这可以保护你。希望能对你有所帮助。


问题是关于客户端 DI,而不是 RemoteServlet 的一方面。 - Robert Munteanu
@Robert同意;但对于我的问题来说,这正是我所需要的,所以我很高兴kiran发帖! - todd.pierzina

1
您可以在服务器端实现一个Servlet服务,从Spring ApplicationContext中检索对象,并呈现为JSon对象(我使用了http://json-lib.sourceforge.net/apidocs/net/sf/json/JSONSerializer.html作为示例)。 然后,您可以拥有一个Singleton Facade Service,让GWT客户端发出请求到我们的Servlet服务。
通过这种方式,您可以在GWT客户端获得运行时依赖注入。

1

жҲ‘жғізҹҘйҒ“Google DIжЎҶжһ¶GuiceжҳҜеҗҰиў«GWTж”ҜжҢҒпјҹ

иҝҷеҸҜиғҪжҳҜдёҖдёӘжӣҝд»Јж–№жЎҲгҖӮ


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接