2016-03-24 7 views
1

Grails Version: 3.1.2Kann ich einen Grails-Service in einem Domänenobjektkonstruktor aufrufen?

Ich habe einen Versionsdienst (VersionService), den ich aufrufen möchte, wenn ich eine neue Instanz eines Domänenobjekts (VersionedomainClass) erstellen. Ich würde die VersionedDomainClass gerne behandeln den Kundendienst anrufen, aber wenn ich versuche, dies zu tun:

class VersionedDomainClass { 

    transient def versionService 

    short businessVersion 

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

} 

der Konstruktor wird während des Startvorgangs aufgerufen, an welchem ​​Punkt versionService noch null ist, damit ich eine NPE erhalten:

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

Ich brauche keine VersionedomainClass beim Start instanziiert; sieht es so aus, als ob Spring versucht, eine eigene Domain zu erstellen? Gibt es eine Möglichkeit, dies zu verhindern, bis die Service-Beans erstellt wurden?

Antwort

1

Statt den Konstruktor verwenden, können Sie beforeInsert()businessVersion zu initialisieren verwenden:

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) 
    } 
} 
+0

Das ist ein Bingo! Vielen Dank. –

Verwandte Themen