2017-01-28 4 views
1

Я не понимаю значения аннотации @With в Play Java. У нас есть the same question в StackOverflow, который кажется Play1, а не Play2. И в документе Play последней версии я увидел этот пример.@ С аннотацией в Play Java

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

Что это значит? В приведенном выше случае, какова разница между аннотацией и без аннотации?

ответ

0

Очевидно, что @With используется для слагающих действий:

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); 
    } 
} 

Вы можете составить код, предоставленный метод действия с другим play.mvc.Action, используя @With аннотацию:

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

Итак, когда будет называться verboseIndex, сначала будет вызываться метод call из VerboseAction. Итак, в этом примере сначала Logger.info напишет некоторое информационное сообщение, а затем ответ ok будет завершен.

+0

Я вижу. Но 'verboseIndex' является методом, тогда как' VerboseAction' является классом. Итак, для меня это странно. Как вы объясните? –

+0

Да, потому что действие - это декоратор для вызова метода действия. – Mysterion

+0

Благодарим вас за ответ. Что вы подразумеваете под «декоратором»? Вы объяснили, что когда вызывается метод 'verboseIndex', также вызывается' VerboseAction'. Но на самом подробном уровне я предполагаю, что метод должен быть вызван. Итак, на самом деле то, что вызывается при вызове 'verboseIndex'? Метод 'call' в' VerboseAction'? –

Смежные вопросы