Есть 3 способа сделать это.
@ тег PreDestroy
метод уничтожения в XML
интерфейс DisposableBean, как указано выше
Мой любимец - это метод @PreDestroy.
Для этого вам нужно:
В application-context.xml добавить следующую схему:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean id="shutDownBean" class="spring.ShutDownBean" />
<context:annotation-config/>
</beans>
Доступны теги @ PreDestroy и @ PostDestroy .
Теперь предположим, что у вас есть ShutDownBean, который вы хотите запустить некоторый код при вызове обратного вызова выключения.
регистрирует бин.
import javax.annotation.PreDestroy;
public final class ShutDownBean {
@PreDestroy
public static void shutDownMethod() {
System.out.println("Shutting down!");
}
}
Теперь все готово.
Если у вас есть настольное приложение , чтобы использовать аннотацию @PreDestroy, вам необходимо закрыть ее следующим образом:
AbstractApplicationContext applicationContext =
new ClassPathXmlApplicationContext("application-context.xml");
applicationContext.registerShutdownHook();
примечание:
AbstractApplicationContext имеет реализацию registerShutdownHook () , так что это минимальный класс, который вы можете использовать.
Также, если вы можете использовать тег destroy-method для классов, вы не контролируете их реализацию. например, вы можете добавить это в ваш applcation-context.xml:
<bean id = "dataSource"
class = "org.apache.commons.dbcp.BasicDataSrouce"
destroy-method = "close">
Значение метода destroy может иметь любую видимость, но не должно иметь аргументов.
Надеюсь, это поможет!