23

かなり複雑なシングルトンオブジェクトのラッパーであるGrailsサービスがあります。サービスの開始時にシングルトンを設定するために、初期化を行いたいと思います。サービスの起動時にサービスによって自動的に呼び出されるようなinit()関数があればいいのですが、そのようなものは見つかりませんでした。

これを行うためのクリーンな方法はありますか?

4

3 に答える 3

32

InitializingBean@Saurabhで説明されているように実装できますが、Grailsの起動プロセスのかなり早い段階で起動するため、動作している間はまだ利用できないものがいくつかあります。たとえば、ドメインクラスでGORMメソッドを呼び出すことができないためです。 Beanの初期化後に発生します。InitializingBean十分でない場合はBootStrap.groovy、たとえばから初期化メソッドを呼び出すことができます。

class BootStrap {

   def myService

   def init = { servletContext ->
      myService.initialize()
   }
}

そして、メソッドinitializeまたはサービスクラスで必要なものを呼び出すことができます。BootStrapサービスクラスにそのコードが必要ない場合は、で直接初期化作業を行うこともできます。

于 2012-04-11T19:39:21.070 に答える
26

標準のPostConstructアノテーションを使用します。

class MyService {    

    @PostConstruct
    def init() {
      // GORM accesible from here
    }

}
于 2013-10-21T14:39:26.063 に答える
12

サーバーはInitializingBeanを実装して、初期化を行うことができます

public class AbcService implements InitializingBean {

    public void afterPropertiesSet() throws Exception {

    //initialization logic goes here
     }

   }    
}
于 2012-04-11T19:33:55.457 に答える