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 回答