我有一个Grails服务,它是一个相当复杂的单例对象的包装器。我想做一些初始化来在服务启动时填充单例。如果某种init()函数在启动时会被服务自动调用,那会很好,但是我没有找到这样的东西。
有干净的方法吗?
答案 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
}
}
}