2012-10-02 28 views
9

Khi tôi đang sử dụng Play 1.2, tôi có thể chú thích một số phương thức bên trong bất kỳ bộ điều khiển nào với @Before hoặc @After (và các thứ khác ...) để thực thi phương thức trước hoặc sau mỗi yêu cầu bên trong bộ điều khiển này.Tương đương Play 2.0 của @Before và @After từ Play 1.2 là gì?

Tôi làm cách nào để thực hiện điều này trong Play 2.0?

Tôi đã đọc một chút về đối tượng Toàn cầu, nhưng dường như nó không phải là thứ mà tôi đang tìm kiếm. Ngoài ra, thành phần hành động có vẻ quá phức tạp đối với những gì tôi muốn làm. Tôi hy vọng sẽ thấy một cái gì đó đơn giản hơn.

Bất kỳ ý tưởng nào?

Trả lời

8

Thật không may, bạn sẽ phải sử dụng action composition cho số @Before và không tương đương với @After.

Đối với @After, tôi sẽ viết phương thức after của riêng mình khi kết thúc hành động; một cái gì đó như thế này:

public static Result index() { 
    .... 
    Result result = ...; 
    return after(result); 
} 

protected static Result after(Result result) { 
    ... 
    Result afterResult = ..., 
    return afterResult 

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

} 

Chú thích với @Logs trong điều khiển của bạn.

Các vấn đề liên quan