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を使用してアノテーションを付けます。