如何在Grails服务上调用初始化函数?

时间:2012-04-11 19:23:31

标签: grails

我有一个Grails服务,它是一个相当复杂的单例对象的包装器。我想做一些初始化来在服务启动时填充单例。如果某种init()函数在启动时会被服务自动调用,那会很好,但是我没有找到这样的东西。

有干净的方法吗?

3 个答案:

答案 0 :(得分:30)

你可以像@Saurabh所描述的那样实现InitializingBean但是在Grails启动过程中很早就会触发,所以当它工作时,有些东西还没有用,例如你不能在域类中调用GORM方法,因为这在bean初始化之后发生。如果InitializingBean不够,您可以从BootStrap.groovy调用初始化方法,例如

class BootStrap {

   def myService

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

您可以在服务类中调用方法initialize或任何您想要的内容。如果您不希望服务类中包含该代码,也可以直接在BootStrap中执行初始化工作。

答案 1 :(得分:23)

我使用标准的PostConstruct注释:

class MyService {    

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

}

答案 2 :(得分:11)

服务器可以实现InitializingBean来进行一些初始化

public class AbcService implements InitializingBean {

    public void afterPropertiesSet() throws Exception {

    //initialization logic goes here
     }

   }    
}