【问题标题】:How to initialize the variables of domain class with the properties defined in config.groovy如何使用 config.groovy 中定义的属性初始化域类的变量
【发布时间】:2012-07-25 08:03:17
【问题描述】:

我在 Config.groovy 中定义了一个变量,如下所示

environments {
    development {
        training.defaultStartTime = "09:00"

    }
    production {
        training.defaultStartTime = "09:00"
    }
}

现在 我想使用 grailsApplication.config .defaultStartTime 在我的域类中初始化变量 startTime。我是这样做的

class Training {
    def grailsApplication
    String startTime = grailsApplication.config.training.defaultStartTime
}

但出现错误

“由 BeanCreationException 引起:创建名为“sessionFactory”的 bean 时出错:调用 init 方法失败;嵌套异常 是 org.hibernate.InstantiationException: 无法实例化测试 objectcom.Training"

使用config.groovy(grailsapplication)中定义的属性初始化域类变量的最佳方法是什么

【问题讨论】:

  • 如何使用config.groovy属性初始化域类的变量
  • 我们不能使用 grailsapplication,因为它提到“这个接口的实现者应该知道 GrailsApplication 仅在调用 initialise() 方法时才被初始化。换句话说,GrailsApplication 实例由 Grails 运行时延迟初始化。”

标签: grails groovy grails-2.0


【解决方案1】:

问题在于注入的工作方式。 bean(如果是域类实例)是使用其默认构造函数创建的,然后将 DI 字段设置为相应的 bean。但是 startTime 字段在构造函数中被初始化 - 在 DI 发生之前 - 所以 grailsApplication 为空。

一种解决方法是创建一个自定义构造函数 - 有关详细信息,请参阅 http://burtbeckwith.com/blog/?p=1003

【讨论】:

  • 事件这个解决方案除了 ConfigurationHolder 之外不起作用
  • 我看到我们不能使用 grailsapplication.config.myproperty 来初始化一个类的变量但是可以在方法内部访问
  • 根据grails.org/doc/latest/api/org/codehaus/groovy/grails/commons/… GrailsApplication 仅在调用initialise() 方法时才被初始化。换句话说,GrailsApplication 实例由 Grails 运行时延迟初始化
猜你喜欢
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-18
  • 2016-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多