java - 什么时候调用 spring beans 销毁方法?

标签 java spring javabeans destroy

我在 bean 的“destroy-method”中添加了一个 sysout 语句。当我运行示例代码时,sysout 没有得到输出。这是否意味着销毁方法没有被调用?

测试类:

  package spring.test;

  import org.springframework.context.ApplicationContext;
  import org.springframework.context.support.ClassPathXmlApplicationContext;

  public class InitTest {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("InitTestContext.xml");
        InitTestBean bean = (InitTestBean)ctx.getBean("InitTestBean");
        bean.display();
    }
  }

bean

  package spring.test;

  public class InitTestBean {
    private String prop1;
    private String prop2;

    public InitTestBean(String prop1, String prop2) {
        System.out.println("Instantiating InitTestBean");
        this.prop1 = prop1;
        this.prop2 = prop2;
    }

    public void setProp1(String prop1) {
        System.out.println("In setProp1");
        this.prop1 = prop1;
    }

    public void setProp2(String prop2) {
        System.out.println("In setProp2");
        this.prop2 = prop2;
    }

    public String getProp1() {
        return prop1;
    }

    public String getProp2() {
        return prop2;
    }

    public void display() {
        System.out.println("Prop1 is " + prop1);
        System.out.println("Prop2 is " + prop2);
    }

    public void initialize(){
        System.out.println("In initialize");
        this.prop1 = "init-prop1";
        this.prop2 = "init-prop2";
    }

    public void teardown() {
        System.out.println("In teardown");
        this.prop1 = null;
        this.prop2 = null;
    }
  }

配置文件:

<?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:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id="InitTestBean" class="spring.test.InitTestBean" init-method="initialize" destroy-method="teardown">
        <constructor-arg value="Prop1" />
        <constructor-arg value="Prop2" />
        <property name="prop1" value="setProp1"/>
        <property name="prop2" value="setProp2"/>
    </bean>

</beans>

最佳答案

您的示例不起作用,因为您没有关闭 appcontext,您只是让程序终止。

在上下文中调用 close(),你会看到 bean destroy-methods 被调用。

关于java - 什么时候调用 spring beans 销毁方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4460384/

相关文章:

java - 对并行线程组执行顺序操作

java - 并发处理-JMS

spring - JPA:如何从 react 存储库中的通量中保存

Spring @Cacheable 默认 TTL

java - 自动施放 Spring Bean

java - 如何打印元音、数字等列表?

java - 在java中获取选项元素的值

java - 在 Spring 中使用 postForEntity 时错误的 POST 正文 JSON 序列化

unit-testing - Apache Camel bean 单元测试

隐藏公共(public)访问器的 Java 私有(private)方法