spring закрыть контекст без вызова cnt.close()

322
19 января 2017, 03:38

Как можно (можно ли) при завершении программы вызывать destroy-method без вызова appContext.close()?

void main(){
appContext = new ClassPathXmlApplicationContext("spring.xml"); 
... blablabla...
// завершаю программу без вызова appContext.close()
}
Answer 1

Можно зарегистрировать Shutdown Hook.

void main(){
appContext = new ClassPathXmlApplicationContext("spring.xml"); 
appContext.registerShutdownHook();
appContext.refresh(); 
... blablabla...
// завершаю программу без вызова appContext.close()
}

В этом случае Spring зарегистрирует перехватчик завершения приложения, в котором будет вызвано закрытие контекста если оно не было вызвано ранее. Удобно при наличии нескольких точек выхода из приложения.

Answer 2

destroy-method будет выполнятся для singleton бинов только при закрытии контекста, для prototype вообще не будет выполноятся так как контекст не будет следить за его жизненным циклом

READ ALSO
Доступ к SharedPreferences из DialogFragment

Доступ к SharedPreferences из DialogFragment

Создаю окно при помощи DialogFragment и layout файла

305
JABX, создание файла и запись XML, Java

JABX, создание файла и запись XML, Java

Изучаю JABX, написал маленький парсер, который вытягивает и сохраняет все в XMLНо столкнулся с проблемой, не могу добавить атрибут во вложенный...

381
Отличие Bundle (SavedInstanceState) от SharedPreferences

Отличие Bundle (SavedInstanceState) от SharedPreferences

Разбирал для себя тему: как восстановить данные после сворачиванияПонял что нужно использовать Bundle (SavedInstanceState) или SharedPreferences

279