【问题标题】:Spring init and destroy methodsSpring初始化和销毁​​方法
【发布时间】:2011-08-04 15:48:09
【问题描述】:
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,我错过了什么或没有得到什么? (我的日志没有错误,以防万一)

谢谢

【问题讨论】:

    标签: spring methods init destroy


    【解决方案1】:

    试试这样:

    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
    

    【讨论】:

    • @Nathan。 Grr,是的,那将是完美的。把它写成答案,我会投赞成票。
    • 这个例子来自“Spring in action”。书中的错误)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 1970-01-01
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      相关资源
      最近更新 更多