簡體   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