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

Выполнение класса Java при запуске приложения с помощью Spring MVC

Каков наилучший способ выполнения класса Java при запуске приложения с помощью Spring MVC?

4b9b3361

Ответ 1

Не обязательно "лучший" способ. Как обычно, есть много способов сделать это, и "лучший" зависит от того, что лучше всего подходит вашему проекту:

  • Используйте init-method = "..." в элементе bean в XML, как упоминалось cjstehno
  • Внедрите Spring InitializingBean интерфейс. При развертывании в ApplicationContext метод afterPropertiesSet() будет вызываться при создании bean.
  • Аннотировать метод на bean с @PostConstruct. Опять же, если он развернут в ApplicationContext, аннотированный метод будет вызываться при создании bean.
  • Если ваш bean больше связан с инфраструктурой bean, которая должна быть привязана к жизненному циклу Spring, реализуйте ApplicationListener <; ContextRefreshedEvent > . Метод onApplicationEvent (..) будет вызываться во время запуска Spring, и вы можете делать любую работу, которая вам там нужна.

Ответ 2

Предполагая, что ваш контекст загружен при запуске, создайте bean в вашем контексте приложения spring с помощью метода init, явно вызванного в конфигурации XML (или реализации Springs InitializingBean). Если у вас включен lazy-load, вам нужно убедиться, что этот bean не ленив.

<bean name="starter" init-method="start" class="com.my.StarterBean" lazy="false" />

(пожалуйста, дважды проверьте параметры в документах).

Если ваш контекст не загружен при запуске, вы можете зарегистрировать прослушиватель контекста сервера (часть API Servlet, а не Spring).

Ответ 3

Вы можете использовать либо реализации:

1) Внедрить интерфейс InitializingBean. Этот подход предоставляется для загрузки всего вашего beans, а затем вызова метода afterPropertiesSet.

    @Override
    public void afterPropertiesSet() throws Exception {
        init();
    }

2) Использование JSR-250 Annotation @PostConstruct. Этот подход не будет ждать загрузки spring beans.

   @PostConstruct
    public void init() {

    }