Playframework 游戏框架2中的Getter/Setter转换

Playframework 游戏框架2中的Getter/Setter转换,playframework,playframework-2.0,playframework-1.x,playframework-2.1,Playframework,Playframework 2.0,Playframework 1.x,Playframework 2.1,Play Framework 1有一个很好的特性,在运行时直接为模型属性赋值会自动转换为函数调用。比如说 model.fullname = "John Smith"; 将在引擎盖下自动转换为: model.setFullname("John Smith"); Play Framework 2中是否存在相同的功能 它在任何地方都有记录吗 下面是一个我试图在Play 2.1.1中使用该功能的示例。它显示正在创建getter和setter,但客户端字节码没有被重写以调用生成的getter和sett

Play Framework 1有一个很好的特性,在运行时直接为模型属性赋值会自动转换为函数调用。比如说

model.fullname = "John Smith";
将在引擎盖下自动转换为:

model.setFullname("John Smith");
Play Framework 2中是否存在相同的功能

它在任何地方都有记录吗


下面是一个我试图在Play 2.1.1中使用该功能的示例。它显示正在创建getter和setter,但客户端字节码没有被重写以调用生成的getter和setter。

我使用Play 2.1.0,getter/setter生成(在运行时)对我有效。在我的“target”目录中,我可以在类中看到我所有字段的getter/setter方法。
只有在类中已经有getter/setter时,它才生成getter/setter。你能在编译好的MyModel.class中为你的例子发布什么吗

这是本书的摘录:为Java而玩


Play使用了一个叫做“字节码增强”的很酷的技巧来添加getter 在编译原始代码之后立即使用setter,然后 以静默方式重写所有客户端字节码以使用生成的 能手和二传手。但是,如果您从字段访问更改为 getter/setter,或者反过来,您会发现您的代码不是 更长的编译时间。这是因为字节码增强发生了 在编译类之后,这意味着它必须实际编译 首先



您是否将字段访问权限更改为getter/setter,或者其他方式?

顺便说一句,在游戏1中,如果我没记错的话,这是由Lombok项目完成的:谢谢Michiel。我在Play代码库中搜索,没有找到任何与Lombok相关的内容,但其行为听起来确实很相似。它看起来像是在创建getter和setter。我不确定这门课和龙目山有没有关系?嗨,贾斯。我更新了该问题,添加了指向我的问题的链接。它表明正在创建getter和setter,但没有调用它们。你介意看看它是否适合你吗?谢谢,我刚刚编译了你的例子。转到PlayGetSet master\target\scala-2.10\classes\models\MyModel.class我可以在那里看到所有的getter/setter。但我的剧本是你背后的颠覆。我不知道这是否重要。谢谢Jas。是的,正在创建getter/setter。我的问题是他们没有被呼叫。当您运行该示例时,是否正在为您调用getter/setter?如果正在调用一些日志语句,您将在控制台中看到它们,例如
System.out.println(“inside getFirstName()”。谢谢,凯文,你不能直接打电话给getter/setter。您需要调用.firstName字段,该剧将处理其余部分。[link]您可以看到以下警告:警告!如果依赖自动生成,则不能直接使用getter和setter方法访问属性。这些方法是在运行时生成的。因此,如果您在编写的代码中引用它们,编译器将找不到这些方法,并将生成一个错误。谢谢Jas。在我的例子中,我正在做你所说的直接作业,例如:myModel.lastName,Play应该负责剩下的工作,即将其转换为getter调用。我的问题是,游戏没有进行这种转换。我在getter中放入一个log语句,查看它是否被调用,例如
System.out.println(“inside getFirstName()”。我在控制台中看不到这些日志语句。你…吗?谢谢你,谢谢你。这正是我想要的行为,但对我来说不起作用。我包含了一个指向的链接,该链接显示正在创建getter和setter,但没有调用它们。你介意看一下它是否适合你吗?谢谢