Как я могу вызвать функцию инициализации службы Grails?
У меня есть служба Grails, которая является оберткой вокруг довольно сложного одноэлементного объекта. Я хотел бы сделать некоторую инициализацию, чтобы заполнить синглтон при запуске службы. Было бы неплохо, если бы была какая-то функция init(), которая будет автоматически вызвана службой при ее запуске, но я не нашел такой вещи.
Есть ли чистый способ сделать это?
Ответы
Ответ 1
Вы можете реализовать InitializingBean
, как описано @Saurabh, но это срабатывает довольно рано в процессе запуска Grails, поэтому, пока он работает, некоторые вещи еще не будут доступны, например, вы не можете позвонить GORM методы в классах домена, поскольку это происходит после инициализации bean. Если InitializingBean
недостаточно, вы можете вызвать метод инициализации из BootStrap.groovy
, например.
class BootStrap {
def myService
def init = { servletContext ->
myService.initialize()
}
}
и вы можете вызвать метод initialize
или все, что вы хотите в классе службы. Вы также можете выполнить инициализацию непосредственно в BootStrap
, если вы не хотите, чтобы этот код был в классе службы.
Ответ 2
Я использую стандартную аннотацию PostConstruct:
class MyService {
@PostConstruct
def init() {
// GORM accesible from here
}
}
Ответ 3
Сервер может реализовать InitializingBean для инициализации
public class AbcService implements InitializingBean {
public void afterPropertiesSet() throws Exception {
//initialization logic goes here
}
}
}