Zerstörungsmethode funktioniert nicht in Spring Framework [duplizieren]

Diese Frage hat hier bereits eine Antwort:

wann heißt eine spring beans destroy-methode 6 Antworten

Bearbeiten: Diese Frage ist nicht dasselbe wieWann wird die destroy-Methode aufgerufen? weil ich richtig anrufecontext.registerShutdownHook und meine Bohne wird immer verderblicher, wie Sie aus den Protokollen sehen können. Mein Problem ist, dass spring meine Methode nicht aufruft. Ich habe diese Frage geprüft, bevor ich sie hier stelle.

Ich konfiguriere die anmutige Zerstörung in meiner Anwendung mit Spring Framework. Wenn ich das Programm ausführe, ruft es nicht die in der bean.xml angegebene destory-Methode auf. Bitte hilf mir, was ich falsch mache.

hier istSSCCE

Bean.xml

<?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 id="helloworld" class="com.hello.pojo.HelloWorld" 
          scope="prototype" init-method="init" destroy-method="destroy">
    </bean>

</beans>

HelloWord.java

package com.hello.pojo;

public class HelloWorld {


    private String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public void init(){
        System.out.println("Bean initializating is in progress");
    }

    public void printMessage(){
        System.out.println("Your message: "+getMessage());
    }
    public void destroy(){
        System.out.println("Bean is being destroyed");
    }

}

MainApp.java

package com.main;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.hello.pojo.HelloWorld;


public class MainApp {

    public static void main(String[]args){
        AbstractApplicationContext context = new ClassPathXmlApplicationContext("Bean.xml");
        HelloWorld objA = (HelloWorld) context.getBean("helloworld");
        objA.setMessage("I am Object A");
        objA.printMessage();
        context.registerShutdownHook();
    }

}

Ausgabe

May 27, 2013 11:59:14 PM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@e9028874: startup date [Mon May 27 23:59:14 EDT 2013]; root of context hierarchy
May 27, 2013 11:59:14 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [Bean.xml]
Bean initializating is in progress
Your message: I am Object A
May 27, 2013 11:59:14 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@63390b47: defining beans [helloworld]; root of factory hierarchy
May 27, 2013 11:59:14 PM org.springframework.context.support.ClassPathXmlApplicationContext doClose
INFO: Closing org.springframework.context.support.ClassPathXmlApplicationContext@e9028874: startup date [Mon May 27 23:59:14 EDT 2013]; root of context hierarchy
May 27, 2013 11:59:14 PM org.springframework.beans.factory.support.DefaultListableBeanFactory destroySingletons
INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@63390b47: defining beans [helloworld]; root of factory hierarchy

Änderungsantrag: Ich habe es versuchtclose undregisterShutdownHook() den Kontext zu schließen und keiner von ihnen funktioniert.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage