Подтвердить что ты не робот

Как я могу вызвать функцию инициализации службы Grails?

У меня есть служба Grails, которая является оберткой вокруг довольно сложного одноэлементного объекта. Я хотел бы сделать некоторую инициализацию, чтобы заполнить синглтон при запуске службы. Было бы неплохо, если бы была какая-то функция init(), которая будет автоматически вызвана службой при ее запуске, но я не нашел такой вещи.

Есть ли чистый способ сделать это?

4b9b3361

Ответ 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
     }

   }    
}