当我使用 Play 1.2 时,我能够使用 @Before 或 @After (以及其他......)注释任何控制器内的一些方法,以便在该控制器内的每个请求之前或之后执行一个方法。
如何在 Play 2.0 中做到这一点?
我阅读了一些有关 Global 对象的信息,但它似乎不是我想要的。此外,对于我想做的事情来说,动作组合似乎太复杂了。我希望看到更简单的东西。
有任何想法吗?
当我使用 Play 1.2 时,我能够使用 @Before 或 @After (以及其他......)注释任何控制器内的一些方法,以便在该控制器内的每个请求之前或之后执行一个方法。
如何在 Play 2.0 中做到这一点?
我阅读了一些有关 Global 对象的信息,但它似乎不是我想要的。此外,对于我想做的事情来说,动作组合似乎太复杂了。我希望看到更简单的东西。
有任何想法吗?
不幸的是,您必须对 使用动作组合,@Before
而@After
.
对于,我会在结束动作结束时@After
编写自己的方法;after
像这样的东西:
public static Result index() {
....
Result result = ...;
return after(result);
}
protected static Result after(Result result) {
...
Result afterResult = ...,
return afterResult
}
public class Logging {
@With(LogAction.class)
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Logs {
}
public static class LogAction extends Action<Logs> {
private void before(Context ctx) {
System.out.println("Before action invoked");
}
private void after(Context ctx) {
System.out.println("After action invoked");
}
public F.Promise<Result> call(Http.Context context) throws Throwable {
before(context);
Promise<Result> result = delegate.call(context);
after(context);
return result;
}
}
}
在控制器中使用 @Logs 进行注释。