【问题标题】:Can I call a grails service in a domain object constructor?我可以在域对象构造函数中调用 grails 服务吗?
【发布时间】:2016-03-24 16:10:20
【问题描述】:

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 正在尝试创建它自己的域类实例,也许?在创建 Service bean 之前,有什么方法可以阻止 Spring 这样做?

【问题讨论】:

    标签: spring spring-mvc grails grails-3.1


    【解决方案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)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多