Die Destroy Methode funktioniert nicht im Frühling Framework [Duplizieren]

8

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.

    
ashish 28.05.2013, 03:46
quelle

1 Antwort

34

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.

Spring-Referenzdokumentation

  

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.

    
gkamal 28.05.2013, 05:09
quelle

Tags und Links