Grails版本:3.1.2
我有一个版本控制服务(VersionService),每当我创建域对象的新实例(VersionedDomainClass)时,我都想调用它。我希望VersionedDomainClass能够处理调用服务,但是当我尝试这样做时:
class VersionedDomainClass {
transient def versionService
short businessVersion
VersionedDomainClass () {
this.businessVersion = versionService.getNextVersion(this.class)
}
}
构造函数在启动时被调用,此时versionService仍为null,因此我得到了一个NPE:
Caused by: java.lang.NullPointerException: Cannot invoke method getNextVersion() on null object
我不需要在启动时实例化任何VersionedDomainClass;看起来Spring似乎试图创建它自己的域类的意义,也许?有没有办法阻止Spring在创建服务bean之前这样做?
答案 0 :(得分:1)
您可以使用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)
}
}