Если вы используете Java 7 или более позднюю версию, вы можете объявить инициализацию контекста внутри try с ресурсами, чтобы вам не приходилось закрывать контекст вручную:
try(final AbstractApplicationContext applicationContext = new ClassPathXmlApplicationContext(filename))
{
//write your code
} catch(Exception e){}
Кроме того, в не-в веб-среде приложения, вы регистрируете ловушку завершения работы с JVM. Это гарантирует плавное завершение работы и вызывает соответствующие методы уничтожения для ваших одноэлементных компонентов, чтобы освободить все ресурсы. Конечно, вы все равно должны правильно настроить и реализовать эти обратные вызовы уничтожения.
Чтобы зарегистрировать обработчик завершения работы, вы вызываете метод registerShutdownHook (), который объявлен в классе AbstractApplicationContext:
public static void main(final String[] args) throws Exception {
AbstractApplicationContext ctx
= new ClassPathXmlApplicationContext(new String []{"beans.xml"});
// add a shutdown hook for the above context...
ctx.registerShutdownHook();
// app runs here...
// main method exits, hook is called prior to the app shutting down... }
И у веб-реализаций SpringCon ApplicationContext уже есть код, позволяющий корректно завершить работу контейнера Spring IoC во время закрытия соответствующего веб-приложения.
источник: spring-framework-reference