2
package com.idol;

public class Auditorium {       
Auditorium(){
}  
public void turnOnLights() {  
    System.out.println("Lights are turned on"); 
}  
public void turnOffLights(){  
    System.out.println("Lights are turned off");
}  

}

对于 xml 上下文,我有:

 <bean id="Auditorium" class="com.idol.Auditorium" init-method="turnOnLights" destroy-method="turnOffLights"/>

测试:

ApplicationContext auditorium =
        new ClassPathXmlApplicationContext("ApplicationContextVer6.xml"); 

auditorium.getBean("Auditorium");

我得到:

只打印“灯已打开”,不打印“灯已关闭”。我虽然在销毁 bean 之前它也应该调用 destroy-method,但我错过了什么或没有得到什么?(我在日志中没有错误,以防万一)

谢谢

4

2 回答 2

5

试试这样:

final ConfigurableApplicationContext auditorium =
        new ClassPathXmlApplicationContext("ApplicationContextVer6.xml");
auditorium.getBean("Auditorium");
auditorium.close(); // thx Nathan

// auditorium.refresh() will also turn the lights off
// before turning them on again
于 2011-08-04T16:07:11.350 回答
0

您无法观察到 destroy 方法正在工作,因为 bean 在 Spring 上下文中始终可用。当您关闭/销毁应用程序上下文时,应销毁其中实例化的所有 bean。看看类中的close()destroy()方法org.springframework.context.support.AbstractApplicationContext

于 2011-08-04T16:30:34.700 回答