5

私は grails アプリを構築していますが、別のサービスでサービスを開始しようとすると問題が発生しました。両方のサービスは、他のサービスで定義されたメソッドを使用します。

class fooService{
    def barService
    barService.doIt()

    def getIt(){
    ...
    }
}

class barService{
    def fooService
    fooService.getIt()

    def doIt(){
    ...
    }
}

アプリを実行してメソッドが使用されている場所に移動すると、このエラーが発生します。

Error creating bean with name 'fooService': 
org.springframework.beans.factory.FactoryBeanNotInitializedException: FactoryBean is 
not fully initialized yet

これはgrailsではできないことですか?または、誰かアドバイスをいただけますか?

ありがとう

4

5 に答える 5

4

私は過去に同様の問題を抱えていましたが、両方のサービスがトランザクションである場合に限ります。それらの少なくとも1つを非トランザクションにすることが可能であれば、そのまま動作するはずです。それが不可能な場合、フォールバックは一種の「遅延バインディング」を実行することです

class FooService {
  def grailsApplication
  private getBarService() {
    grailsApplication.mainContext.barService
  }

  public methodThatUsesBarService() {
    barService.doSomething()
  }
}

これはbarService、が作成された時点ではなく、使用された時点でアプリコンテキストで検索さFooServiceれます。

于 2012-08-31T11:30:52.017 に答える
3

サービスは別のサービスから呼び出すことができますが、初期化時にはできません。これを実装したい場合、方法は次のようになります。

class fooService{
    def barService

    def getIt(){
        ...
    }

    def anotherFooMethod(){

        barService.doIt();
    }
}

class barService{
    def fooService


    def doIt(){
        ...
    }

    def anotherBarMethod(){

        fooService.getIt();
    }
}
于 2012-08-31T11:50:09.820 に答える
1

これは有効なコードではないため、実際に何が起こっているのかを知るのは困難です。doIt()とのgetIt()呼び出しはコンストラクターにありますか? その場合は、実装するサービスを変更し、メソッドorg.springframework.beans.factory.InitializingBeanで呼び出しを行います。afterPropertiesSet

于 2012-08-31T11:27:36.777 に答える