2017-01-28 1 views
1

Ich verstehe nicht die Bedeutung von @With Annotation in Play Java. Wir haben the same question in StackOverflow, die Play1, nicht Play2 scheint. Und in Play-Dokument der neuesten Version habe ich dieses Beispiel gesehen.@With Annotation in Play Java

@With(VerboseAction.class) 
public Result verboseIndex() { 
    return ok("It works!"); } 

Was bedeutet das? Worin besteht im obigen Fall der Unterschied zwischen der Annotation und der Annotation?

Antwort

0

Es ist offensichtlich, dass @With zum Komponieren Aktionen verwendet:

public class VerboseAction extends play.mvc.Action.Simple { 
    public CompletionStage<Result> call(Http.Context ctx) { 
     Logger.info("Calling action for {}", ctx); 
     return delegate.call(ctx); 
    } 
} 

Sie den Code durch die Aktion-Methode mit einer anderen play.mvc.Action versehen komponieren kann, mit der @With Anmerkung:

@With(VerboseAction.class) 
public Result verboseIndex() { 
    return ok("It works!"); 
} 

So, wenn verboseIndex aufgerufen wird, wird zuerst Methode call von VerboseAction aufgerufen werden. Also, in diesem Beispiel, zuerst die Logger.info wird einige Info-Nachricht schreiben, und dann später ok Antwort wird abgeschlossen sein.

+0

Ich sehe. Aber "verboseIndex" ist eine Methode, während "VerboseAction" eine Klasse ist. Also, für mich ist es seltsam. Wie erklärst du es? –

+0

Ja, weil Aktion ein Dekorator für den Aufruf der Aktionsmethode ist. – Mysterion

+0

Vielen Dank für Ihre Antwort. Was meinst du mit dem "Dekorateur"? Sie haben erklärt, dass beim Aufruf der Methode 'verboseIndex' auch die VerboseAction aufgerufen wird. Aber auf der detailliertesten Ebene nehme ich an, dass eine Methode aufgerufen werden sollte. Also, was heißt eigentlich, wenn 'verboseIndex' aufgerufen wird? Die Methode 'Call' innerhalb der' VerboseAction'? –