【问题标题】:Getter/Setter translation in Play Framework 2Play Framework 2 中的 Getter/Setter 转换
【发布时间】:2013-05-15 02:08:17
【问题描述】:

Play Framework 1 有一个很棒的功能,即直接将值分配给模型属性会在运行时自动转换为函数调用。 Here are the docs。例如

model.fullname = "John Smith";

会在后台自动转换成这个:

model.setFullname("John Smith");

Play Framework 2 中是否存在相同的功能?

它在任何地方都有记录吗?

这是一个sample java project,我试图让该功能在 Play 2.1.1 中运行。它表明正在创建 getter 和 setter,但并未重写客户端字节码以调用生成的 getter 和 setter。

【问题讨论】:

  • 顺便说一句,在 Play 1 中,如果我没记错的话,这是由 Project Lombok 完成的:projectlombok.org
  • 谢谢米歇尔。我搜索了 Play 代码库,找不到任何对 Lombok 的引用,但行为听起来确实相似。看起来PropertiesEnhancer.java 正在创建getter 和setter。我不确定这个类是否与龙目岛有任何关系?

标签: playframework playframework-2.0 playframework-1.x playframework-2.1


【解决方案1】:

这是本书的摘录:Play For Java


Play 使用称为“字节码增强”的很酷的技巧来添加 getter 并在您的原始代码编译后立即设置,然后 默默地重写所有客户端字节码以使用生成的 吸气剂和二传手。但是,如果您从字段访问更改为 getter/setter,或者相反,你会发现你的代码没有 更长的编译时间。这是因为字节码增强发生 在你的类被编译之后,这意味着它必须实际编译 首先。


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

【讨论】:

  • 谢谢明宇。这正是我想要得到的行为,但它对我不起作用。我已经包含一个指向Sample Project 的链接,它显示正在创建getter 和setter,但没有调用它们。你介意看看它是否适合你吗?谢谢
【解决方案2】:

我正在使用 Play 2.1.0,getter/setter 生成(在运行时)对我有用。在我的“目标”目录中,在类中,我可以看到所有字段的 getter/setter 方法。 仅当您的班级中已经有 getter/setter 时,它才不会生成它们。您可以为您的示例发布已编译的 MyModel.class 中的内容吗?

【讨论】:

  • 嗨,贾斯。我更新了问题以包含指向我的sample project 的链接。它表明正在创建 getter 和 setter,但没有调用它们。你介意看看它是否适合你吗?谢谢
  • 我刚刚编译了你的例子。转到 PlayGetSet-master\target\scala-2.10\classes\models\MyModel.class 我可以在那里看到所有的 getter/setter。但我的 Play 是你身后的一个颠覆。我不知道这是否重要。
  • 谢谢贾斯。是的,正在创建 getter/setter。我的问题是他们没有被调用。当您运行该示例时,是否会为您调用 getter/setter?如果它们被调用,您将在控制台中看到一些日志语句,例如System.out.println("inside getFirstName()");。谢谢,凯夫
  • 不能直接调用gettters/setter。你需要调用 .firstName 字段,而 Play 会处理其余的事情。[链接]playframework.com/documentation/1.2.3/model[link].Here 你可以看到以下警告:警告!如果依赖自动生成,则不能直接使用 getter 和 setter 方法访问属性。这些方法是在运行时生成的。因此,如果您在编写的代码中引用它们,编译器将找不到方法并会产生错误。
  • 谢谢贾斯。在我的示例中,我正在执行您所说的直接分配,例如<p>@myModel.lastName</p>,而 Play 应该负责其余的工作,即将其转换为 getter 调用。我的问题是 Play 没有进行这种转换。我将日志语句放入 getter 以查看它是否被调用,例如 System.out.println("inside getFirstName()");。我在控制台中看不到这些日志语句。你?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
  • 1970-01-01
  • 2015-08-24
  • 2011-01-17
  • 2014-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多