【发布时间】:2012-04-24 03:33:18
【问题描述】:
我有一个 Grails 服务,它是一个相当复杂的单例对象的包装器。我想做一些初始化以在服务启动时填充单例。如果服务启动时会自动调用某种 init() 函数,那就太好了,但我没有发现这样的事情。
有没有干净的方法来做到这一点?
【问题讨论】:
-
你的意思是一个实际的服务类?
标签: grails
我有一个 Grails 服务,它是一个相当复杂的单例对象的包装器。我想做一些初始化以在服务启动时填充单例。如果服务启动时会自动调用某种 init() 函数,那就太好了,但我没有发现这样的事情。
有没有干净的方法来做到这一点?
【问题讨论】:
标签: grails
您可以按照@Saurabh 的描述实现InitializingBean,但它会在Grails 启动过程的早期触发,因此虽然它有效,但有些东西尚不可用,例如您不能调用GORM域类中的方法,因为这发生在 bean 初始化之后。如果InitializingBean 不够用,您可以从BootStrap.groovy 调用初始化方法,例如
class BootStrap {
def myService
def init = { servletContext ->
myService.initialize()
}
}
你可以在服务类中调用initialize 或任何你想要的方法。如果您不想在服务类中使用该代码,也可以直接在BootStrap 中进行初始化工作。
【讨论】:
@PostConstruct 和 implements InitializingBean
我使用标准的 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
}
}
}
【讨论】: