Anhe0901 2017-10-23 07:52 采纳率: 66.7%
浏览 3805
已采纳

Spring的destroy方法不执行

Spring可以通过配置init-method和destroy-method属性来在容器生成和销毁时分别执行一段代码,但在我的demo中,作为init方法的start方法执行了,而作为destroy方法的shutdown方法一直没有执行,代码如下:
配置文件:

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean class="com.ljh.beans.Foo2" id="foo2" scope="prototype" init-method="start" destroy-method="shutdown">
        <property name="foo" ref="foo"></property>
    </bean>

    <bean class="com.ljh.beans.Foo" id="foo" scope="prototype">
        <property name="num" value="2"></property>
    </bean>
</beans>

Bean文件:

 public class Foo2 {

    private Foo foo;

    public void say(){
        System.out.println("Foo2 method:" + foo.hashCode());
        System.out.println("Foo2 hashcode" + this.hashCode());
        System.out.println("----------------------");
    }

    private void start() {
        System.out.println("Start method");
    }

    private void shutdown() {
        System.out.println("Shutdown method");
    }

    public Foo getFoo() {
        return foo;
    }

    public void setFoo(Foo foo) {
        this.foo = foo;
    }

}

测试方法:

 public class Test01 {

    private ApplicationContext context;

    @Before
    public void init() {
        context = new ClassPathXmlApplicationContext("/springConfig.xml");
    }

    @Test
    public void Test() {
        Foo2 foo2 = (Foo2) context.getBean("foo2");
        System.out.println(foo2.getFoo().getNum());
    }

    @After
    public void After() {
        System.out.println("In after method");
        ((ClassPathXmlApplicationContext) context).close();
    }
  • 写回答

1条回答 默认 最新

  • 凡恩 2017-12-02 14:29
    关注

    当使用 init-method 和 destroy-method 的时候,使用 prototype 时 Spring 不会负责销毁容器对象,即 Spring 不会调用 destroy-method 所指定的方法,所以需要去掉 scope 属性,使用默认的 singleton

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化