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

Spi*_*ams 22 grails

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

有干净的方法吗?

Bur*_*ith 31

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

class BootStrap {

   def myService

   def init = { servletContext ->
      myService.initialize()
   }
}
Run Code Online (Sandbox Code Playgroud)

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


Isi*_*oGH 24

我使用标准的PostConstruct注释:

class MyService {    

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

}
Run Code Online (Sandbox Code Playgroud)


Sau*_*abh 11

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

public class AbcService implements InitializingBean {

    public void afterPropertiesSet() throws Exception {

    //initialization logic goes here
     }

   }    
}
Run Code Online (Sandbox Code Playgroud)