我目前正在学习和试验 Spring 配置中指定的 Spring 的 init-method 和 destroy-method 属性。
我的问题是如何告诉 Spring 在程序终止之前为那些设置了方法的 bean 调用 destroy-method?
换句话说,我希望在程序执行之前对所有使用销毁方法的 bean 执行任何拆除操作。这甚至可能吗?
正如许多其他人所建议的那样,我正在阅读 Manning 的书“Spring in Action”,因此我现在正在尝试使用这个 bean:
<bean id="auditorium" class="com.springinaction.springidol.Auditorium"
init-method="turnOnLights"
destroy-method="turnOffLights"/>
从我的实验来看,Spring 不会自动执行此操作,因此,我正在使用 BeanDefinitionRegistry。但是,这涉及隐式删除 bean,这是我想避免的。
ApplicationContext ctx = new ClassPathXmlApplicationContext("Beans.xml");
Auditorium auditorium = (Auditorium) ctx.getBean("auditorium");
// Removing the bean from container
BeanDefinitionRegistry factory = (BeanDefinitionRegistry) ctx.getAutowireCapableBeanFactory();
factory.removeBeanDefinition("auditorium");
此外,为了一个完整的问题,下面是我的礼堂课:
public class Auditorium {
private boolean isLightsOn;
public Auditorium() {
isLightsOn = false;
}
public void turnOnLights() {
isLightsOn = true;
printLights();
}
public void turnOffLights() {
isLightsOn = false;
printLights();
}
public void printLights() {
if (isLightsOn) {
System.out.println("Lights are turned on!");
} else {
System.out.println("Lights are turned off!");
}
}
}