Bearbeiten:
Diese Frage ist nicht dasselbe wie Wann wird die Methode destroy aufgerufen weil ich context.registerShutdownHook
richtig anrufe und meine Bean wird destory, wie Sie aus den Protokollen sehen können. Mein Problem ist, dass der Frühling nicht meine Methode nennt. Ich habe diese Frage geprüft, bevor ich sie hier anfrage.
Ich konfiguriere das graceful destroy in meiner Anwendung mit Springframework. Wenn ich das Programm ausführe, ruft es nicht die in der bean.xml angegebene Methode destory auf. Bitte hilf mir, was ich falsch mache.
Hier ist SSCCE
Bean.xml
%Vor%HalloWord.java
%Vor%MainApp.java
%Vor%Ausgabe
%Vor% Änderung:
Ich habe close
und registerShutdownHook()
ausprobiert, um den Kontext zu schließen, und keiner von ihnen funktioniert.
Die Destroy-Methode wird nicht für Beans des Scope-Prototyps aufgerufen. Dies liegt daran, dass der Kontext die Objekte des Prototypbereichs nicht protokolliert (wenn dies der Fall ist, führt dies zu einem Speicherverlust, da die Feder nicht weiß, wann sie zu entfernen ist).
Details aus der Frühjahrsdokumentation.
Es gibt eine ziemlich wichtige Sache, auf die Sie achten sollten, wenn Sie eine Bean im Prototyp-Bereich, in dem sich der Lebenszyklus der Bean ändert leicht. Spring verwaltet nicht den gesamten Lebenszyklus eines Prototyps Bean: Der Container instanziiert, konfiguriert, dekoriert und anderes setzt ein Prototypobjekt zusammen, übergibt es dem Kunden und hat dann keine weiteres Wissen über diese Prototypinstanz. Dies bedeutet, dass während Initialisierungslebenszyklus-Rückrufmethoden werden für alle aufgerufen Objekte unabhängig vom Umfang, bei Prototypen beliebig konfigurierbar Destruction Lifecycle Callbacks werden nicht aufgerufen.