Frage

Die Dokumentation ist nicht sehr klar zu diesem Thema. Kann jemand die Unterschiede zwischen diesen beiden beleuchten?

@After -. Methoden mit der @After Anmerkung kommentierten werden für diesen Regler nach jeder Aktion Aufruf ausgeführt

@Finally -. Methoden mit der @Finally Anmerkung kommentieren ausgeführt werden, nach jeder Aktion resultiert aus für diesen Controller angewandt wird,

Würde es weh Leistung @Finally zu verwenden, wenn @After funktionieren würde?

War es hilfreich?

Lösung

Wenn Sie einen kleinen Test-Harnisch schreiben, werden Sie sehen, wie das funktioniert, aber der Kernpunkt ist das

  • @Before aufgerufen wird, bevor Sie Aktion ausgeführt wird

  • @After wird aufgerufen, nachdem der Controller seine Ausführung abgeschlossen ist, aber bevor die Ausgabe an den Browser gerendert wird

  • @Finally aufgerufen wird, wenn die Ergebnisse an den Browser veröffentlicht.

So in den meisten Fällen @After und @Finally werden auf die gleiche Art und Weise für Sie arbeiten, aber einen geringen Unterschied, je nach Ihrem speziellen Anwendungsfall. Es sollte jedoch keinen Unterschied, um die Leistung machen.

Der Test-Harnisch, dass ich schrieb, dies zu beweisen, folgt als

public class Application extends Controller {

    @Before
    static void log0() {Logger.info("before: "+ response.out.size());}
    @After
    static void log1() {Logger.info("After: "+ response.out.size());}
    @Finally
    static void log2() {Logger.info("finally: "+ response.out.size());}

    public static void index() {
        Logger.info("in index action");
        render();
    }
}

Der Ausgang I get wird folgt als

20:51:37,741 INFO  ~ before: 0
20:51:37,742 INFO  ~ in index action
20:51:38,083 INFO  ~ After: 0
20:51:38,106 INFO  ~ finally: 706

Welche deutlich die Reihenfolge der Verarbeitung zeigt, und die Daten an den HTTP-Response-Objekt ausgegeben wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top