Spring 我可以在域对象构造函数中调用grails服务吗?
Grails版本:3.1.2 我有一个版本控制服务(VersionService),每当我创建一个域对象(VersionedDomainClass)的新实例时,我都想调用它。我希望VersionedDomain类处理调用该服务,但当我尝试这样做时:Spring 我可以在域对象构造函数中调用grails服务吗?,spring,spring-mvc,grails,grails-3.1,Spring,Spring Mvc,Grails,Grails 3.1,Grails版本:3.1.2 我有一个版本控制服务(VersionService),每当我创建一个域对象(VersionedDomainClass)的新实例时,我都想调用它。我希望VersionedDomain类处理调用该服务,但当我尝试这样做时: class VersionedDomainClass { transient def versionService short businessVersion 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
我不需要在启动时实例化任何VersionedDomain类;看起来Spring正试图创建自己的域类存在,也许吧?在创建服务bean之前,是否有任何方法阻止Spring执行此操作?您可以使用
beforeinert()
来初始化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)
}
}