Play Framework如何运作?

我喜欢玩! 与其他企业Java框架相比,开发人员使用起来非常简单。 但是,它是如何做到的? 使用像Java这样的编译语言可以使编辑 – 刷新周期成为可能吗? 是什么让Play! 按照它的工作方式工作?

Play使用Eclipse编译器在运行时编译代码。

请查看以下类,Play使用该类在运行时执行必要的编译。

https://github.com/playframework/play/blob/master/framework/src/play/classloading/ApplicationCompiler.java

这是运行时编译/类加载器和javassist的奇妙魔力……

但是不要忘记,在prod环境中,它不像Groovy那样在运行时基本上将脚本重新编译为Java类(除非您自然地预编译脚本)。 在生产中,玩! 使用真正的编译类运行,因此它与经典的Java代码一样高效。 而且,它不像Spring或其他框架那样使用大量的AOP,在函数调用和实际业务代码之间有很多开销。

IMO,这是一个非常聪明的设计;)

我将Play(+ Scala)与Lift + mvn scala:cc + JRebel进行了比较。 玩是更好的经验。 现在,我知道原因:

游戏是无国籍的。 因此,它可以卸载Controller,忘记所有字段并加载+再次初始化它。 JRebel旨在更加通用。 它假定状态很重要,因此有时(经常?)失败,因为在某些情况下它不能保持状态。