2017-02-20 80 views
0

當我們使用Play Framework Action Composition時,我們可以直接使用@With註釋,如explained here。或者,我們可以定義custom action annotations如果我們可以使用@With註釋直接執行動作組合,那麼爲什麼我們需要使用接口創建自定義註釋?

但定義自己的註釋有什麼好處?這就像我們只是添加一箇中間人(界面)。

還有一個疑問:在實現動作類時,我們使用泛型來指定相應的接口。僅僅是因爲Play是類型安全的嗎?在他們提到的文檔中,「Action定義將註釋作爲配置進行檢索」。僅僅是因爲我們可以使用自定義註釋進行配置?

回答

1

想想下面的註釋:

@With(CacheAction.class) 
@Target({ElementType.TYPE, ElementType.METHOD}) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface Cached { 
    String key(); 
    Long expires(); 
    String region(); 
} 

通過上面的註釋,你可以註釋喜歡你的行動:你會怎麼通過這些高速緩存配置的構成動作用

@Cached(
    key = "my.cached.page", 
    expires = 30, 
    region = "pages" 
) 
public Result index() { 
    ... 
} 

所以@With註釋?你不能。 @With非常好,如果您不必配置組合操作的行爲方式,比如登錄文檔示例。但是,如果你需要,他們宣佈自己的註釋是必要的。

Action類希望註釋類型,因爲你就可以檢索configuration同時調用組成行動:

public CompletionStage<Result> call(Context ctx) { 
    Cached cacheConfiguration = this.configuration; 
    String key = cacheConfiguration.key(); 
    Long expires = cacheConfiguration.expires(); 
    string region = cacheConfiguration.region(); 

    ... 
} 

最後,定義自己的註釋是好事,因爲你可以更好地表達語義有關他們(這是一個@Cached動作,這是一個動作@Authenticated等)。

相關問題