如果我们可以使用@With注释直接进行动作合成,那么为什么我们需要使用接口创建自定义注释?

时间:2017-02-20 07:33:27

标签: java playframework

当我们使用Play Framework Action Composition时,我们可以直接使用@With注释,explained here。或者,我们可以定义custom action annotations

但是定义自己的注释有什么好处?就像我们只是添加一个中间人(界面)。

还有一个疑问:在实现动作类时,我们使用泛型来指定相应的接口。是因为Play类型安全吗?在他们提到的文档中,#34; Action定义将注释检索为配置"。是因为我们可以使用自定义注释进行配置吗?

1 个答案:

答案 0 :(得分: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动作等。)