【发布时间】:2012-01-06 23:41:03
【问题描述】:
这个问题可能会暴露我对 AspectJ 的了解不足,但无论如何:)
我已经成功地使用 Spring Roo 将一组表逆向工程到一个新的 Roo 项目中。我希望能够通过不将我的方面“推送”到普通的旧 Java 类中来保持 Roo 的往返工程方面。但是,我在向 Aspect 中定义的成员字段分配值时遇到了问题。
例如,我有一个 RooDbManaged 实体类,我们称它为 X,而 Roo 生成了一个切面:X_Roo_DbManaged。现在,我想为字段“updateDate”自定义一个设置器,以便我可以将日期分配为持久性时的当前日期。因此,我将自定义代码放在 X 类中,如下所示:
public void setUpdateDate(Date updateDate) {
this.updateDate = new Date();
}
正如我所料,这会导致 Roo 从方面删除 setter,因为我现在已经在 X 中定义了它。
这给了我一个错误: X.updateDate 字段不可见
如果我将 X_Roo_DbManaged 方面中字段的可见性更改为“公共”(我不想这样做),这将解决问题,直到 Roo 自动重新生成导致错误再次发生的方面。
我的猜测是我遗漏了一些如此明显的东西,以至于没有人认为值得发布,因为我通常成功的谷歌搜索未能找到任何解决方案!
我应该补充一点,我的解决方法是通过将 X_Roo_Controller 中的相关方法移动到 XController 中并使用未修改的设置器在那里分配日期来自定义 X_Roo_Controller 中的相关方法。这似乎与直觉相反,因为我真的希望 updateDate 在设置时始终是当前日期。有趣的是,更新日期字段上的 Roo 生成的 @Temporal(TemporalType.TIMESTAMP) 注释不提供此功能。我真的很希望能够用 Roo 命令告诉 Roo,某些 DBRE 字段应该具有这种行为,而不必担心本质上是“管道”。
【问题讨论】:
标签: java spring aspectj spring-roo