Grails中的域类构造函数?

Grails中的域类构造函数?,grails,groovy,gorm,Grails,Groovy,Gorm,我有一些代码要在创建域类对象时运行;在Java中,我会在构造函数中包含这段代码。如何在Groovy/Grails中实现这一点 谢谢。您可以向域类添加构造函数,但如果默认的无参数构造函数尚未存在,则还必须添加该构造函数 //Domain Class class Author { String name Author() { //Execute post creation code } Author(String _name) {

我有一些代码要在创建域类对象时运行;在Java中,我会在构造函数中包含这段代码。如何在Groovy/Grails中实现这一点


谢谢。

您可以向域类添加构造函数,但如果默认的无参数构造函数尚未存在,则还必须添加该构造函数

//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')
你见过groovy构造函数吗?我使用这种技术成功地将映射构造函数添加到Grails域类中


包含一个很好的示例,并突出了一个重要问题。如果要禁用Grails域类的映射构造函数(我认为这不是一个特别好的主意),可以尝试抛出运行时异常,而不是返回新实例。或者,让地图构造器整理数据并调用其他构造器。

根据具体的用例,您可以使用GORM事件

所以你可以用

def beforeInsert() {
    doMyCustomThing()
}

def onLoad() {
    doMyCustomThing()
}

还有一些其他选项,包括Hibernate事件和自定义GORM事件

谢谢,但是我如何能够用映射实例化对象,并且仍然有一些构造函数的代码呢?我们不能在域类本身中重写映射构造函数,因为映射构造函数被添加到groovy类的元类中(在本例中为grails域类)。但是您可以将元类上的构造函数重写为。您必须为特定的域类在
BootStrap.groovy
中添加该逻辑。您使用groovy元编程的强大功能!!没有要定义的构造函数,只需使用构造函数调用domian…@danielad我真希望java具有该功能。Eclipse自动生成可以吗这是一个技巧,但是groovy要简单得多。您希望在Hibernate(从DB)创建实例时,或者在使用
new
编程创建(瞬态)实例时,发生这种自定义初始化吗?