我想在创建域类对象时运行一些代码;在Java中,我会在构造函数中包含此代码。我怎么能用Groovy / Grails做呢?
感谢。
答案 0 :(得分:6)
您可以向域类添加构造函数,但如果尚未存在,则还必须添加默认的no-arg构造函数。
//Domain Class
class Author {
String name
Author() {
//Execute post creation code
}
Author(String _name) {
name = _name
//Execute post creation code
}
}
另一方面,域类是POGO,因此如果没有需要在对象创建时执行的额外逻辑,您也可以使用映射构造函数。在不添加任何构造函数的情况下,您还可以将Author
实例化为:
Author(name: 'John Doe')
答案 1 :(得分:3)
你见过关于groovy构造函数的this page吗?我已经成功地使用这种技术将地图构造函数添加到Grails域类。
This article包含一个很好的例子,并突出了一个重要问题。如果要禁用Grails域类的映射构造函数(不是我认为这是一个特别好的主意),您可能会尝试抛出运行时异常而不是返回新实例。或者,让您的地图构造函数对数据进行编组并调用其他构造函数。
答案 2 :(得分:0)
根据确切的用例,您可以使用GORM事件......
http://docs.grails.org/3.1.1/guide/single.html#5.5.1
所以你可以使用
def beforeInsert() {
doMyCustomThing()
}
def onLoad() {
doMyCustomThing()
}
还有一些其他选项,包括Hibernate事件和自定义GORM事件