Я люблю играть! По сравнению с другими корпоративными Java-фреймворками, это невероятно просто для разработчика. Но как это сделать? Что делает цикл редактирования-обновления возможным с таким компилируемым языком, как Java? Что делает Play! работать так, как работает?
Как работает функция Play Framework?
Ответ 1
Это чудесная магия компиляции/загрузчика классов и javassist...
Но не забывайте, что в среде prod он не похож на Groovy, который в основном перекомпилирует ваши скрипты в классы Java во время выполнения (если вы не прекомпилируете свои сценарии естественно). В prod, Play! работает с реальными скомпилированными классами, поэтому он эффективен, как классический Java-код. Более того, это не похоже на Spring или другие фреймворки, которые используют большое количество АОП с большим количеством накладных расходов между вызовом функции и вашим реальным бизнес-кодом.
IMO, это действительно умный дизайн;)
Ответ 2
Play использует компилятор Eclipse для компиляции кода во время выполнения.
Взгляните на следующий класс, который используется Play для выполнения необходимой компиляции во время выполнения.
Ответ 3
Я сравнил Play (+ Scala) для Lift + mvn scala: cc + JRebel. Играть намного лучше. Теперь я знаю причину:
Игра без апатии. Таким образом, он может выгрузить контроллер, забыть все поля и загрузить + инициализировать его снова. JRebel нацелен на гораздо более общий характер. Он предполагает, что состояние важно, поэтому иногда (часто?) Терпит неудачу, поскольку в некоторых случаях оно не может сохранить состояние.