3

以下のように 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) で定義されたプロパティを使用してドメイン クラスの変数を初期化する最良の方法は何ですか?

4

1 に答える 1

4

問題は、注入の仕組みによるものです。Bean (ドメイン クラス インスタンスの場合) はデフォルトのコンストラクターを使用して作成され、DI フィールドは対応する Bean に設定されます。ただし、startTimeフィールドはコンストラクターで初期化されます-DIが発生する前に-したがってgrailsApplication、nullです。

1 つの回避策は、カスタム コンストラクターを作成することです。詳細については、 http://burtbeckwith.com/blog/ ?p=1003 を参照してください。

于 2012-07-25T08:41:40.407 に答える