繁体   English   中英

我可以在域对象构造函数中调用 grails 服务吗?

[英]Can I call a grails service in a domain object constructor?

Grails 版本:3.1.2

我有一个版本控制服务 (VersionService),每当我创建域对象 (VersionedDomainClass) 的新实例时,我都想调用它。 我希望 VersionedDomainClass 来处理调用服务,但是当我尝试这样做时:

class VersionedDomainClass {

    transient def versionService

    short businessVersion

    VersionedDomainClass () {
         this.businessVersion = versionService.getNextVersion(this.class)
    }

}

构造函数在启动期间被调用,此时 versionService 仍然为空,所以我得到了一个 NPE:

Caused by: java.lang.NullPointerException: Cannot invoke method getNextVersion() on null object

我不需要在启动时实例化任何 VersionedDomainClass; 看起来 Spring 正在尝试创建它自己的域类,也许? 在创建服务 bean 之前,有什么方法可以阻止 Spring 这样做吗?

您可以使用beforeInsert()来初始化businessVersion ,而不是使用构造函数:

class VersionedDomainClass {

    transient def versionService

    short businessVersion

    /*
     * I get called only once;
     * right before I'm saved in the db for the first time.
     */
    def beforeInsert() {
        businessVersion = versionService.getNextVersion(this.class)
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM