Есть ли у Spring способ загрузить вещи при первой загрузке приложения?На глобальном уровне - PullRequest
5 голосов
/ 07 декабря 2011

Есть ли какой-либо пружинный способ для инициализации при загрузке MVC?

Скажите, что мне нужно создавать глобальные объекты на основе файлов конфигурации, есть ли место для этого или я просто создаюмой собственный сервлет и сделать это в oninit?

Ответы [ 3 ]

5 голосов
/ 07 декабря 2011

Как насчет стандартного @PostConstruct?

@Service
class AnySpringBean {

    @PostConstruct
    public void init() {
        //run when bean is created
    }

}

Работает также на @Controller с.

ОБНОВЛЕНИЕ: Чем больше глобальное место будет для подклассаContextLoaderListener) и переопределить contextInitialized() и использовать его в web.xml (см. user1076371 answer ).Мне не очень нравится этот подход, но, по крайней мере, инициализация не привязана ни к одному бину Spring.

4 голосов
/ 07 декабря 2011

Существует интерфейс ApplicationListener, который можно реализовать, чтобы подключиться к событию завершения запуска. Я использую это в своем приложении, чтобы делать вещи после того, как я знаю, что Spring закончил запуск. У меня есть несколько различных классов, которые я хочу запускать в фоновых потоках после того, как система "работает", и каждый реализует этот интерфейс для выполнения своих конкретных действий после запуска.

Оно отправляется после того, как приложение в целом завершено, но каждый прослушивающий пружинный бин получает событие, поэтому вы можете подключить его к какому-либо существующему бину или создать что-то вроде PostStartupBean, которое существует только для реализации этого. способ.

public void onApplicationEvent( ApplicationEvent applicationEvent )
{
   if ( applicationEvent instanceof ContextRefreshedEvent )
   {
      ..do stuff here..
   }
}
0 голосов
/ 07 декабря 2011

Лучше всего было бы оставить это весне.Добавьте ваши глобальные объектные бины (которые могут быть синглетонами и т. Д.) В контекст вашего приложения.Убедитесь, что Spring инициализируется при загрузке приложения, добавив ContextLoaderListener в файл web.xml.

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4">

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

</web-app>

Вы можете получить доступ к глобальным объектам из WebApplicationContext в любом месте приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...