Каков наилучший способ выполнения класса Java при запуске приложения с помощью Spring MVC?
Выполнение класса Java при запуске приложения с помощью Spring MVC
Ответ 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() {
}