かなり複雑なシングルトンオブジェクトのラッパーであるGrailsサービスがあります。サービスの開始時にシングルトンを設定するために、初期化を行いたいと思います。サービスの起動時にサービスによって自動的に呼び出されるようなinit()関数があればいいのですが、そのようなものは見つかりませんでした。
これを行うためのクリーンな方法はありますか?
かなり複雑なシングルトンオブジェクトのラッパーであるGrailsサービスがあります。サービスの開始時にシングルトンを設定するために、初期化を行いたいと思います。サービスの起動時にサービスによって自動的に呼び出されるようなinit()関数があればいいのですが、そのようなものは見つかりませんでした。
これを行うためのクリーンな方法はありますか?
InitializingBean
@Saurabhで説明されているように実装できますが、Grailsの起動プロセスのかなり早い段階で起動するため、動作している間はまだ利用できないものがいくつかあります。たとえば、ドメインクラスでGORMメソッドを呼び出すことができないためです。 Beanの初期化後に発生します。InitializingBean
十分でない場合はBootStrap.groovy
、たとえばから初期化メソッドを呼び出すことができます。
class BootStrap {
def myService
def init = { servletContext ->
myService.initialize()
}
}
そして、メソッドinitialize
またはサービスクラスで必要なものを呼び出すことができます。BootStrap
サービスクラスにそのコードが必要ない場合は、で直接初期化作業を行うこともできます。
標準のPostConstructアノテーションを使用します。
class MyService {
@PostConstruct
def init() {
// GORM accesible from here
}
}
サーバーはInitializingBeanを実装して、初期化を行うことができます
public class AbcService implements InitializingBean {
public void afterPropertiesSet() throws Exception {
//initialization logic goes here
}
}
}