![](/img/trans.png)
[英]Service is not getting injected into Grails domain class , Grails 2.0.0 and 2.0.3
[英]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.