我有一个 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
}
}
}