当我们使用Play Framework Action Composition时,我们可以直接使用@With
注释,explained here。或者,我们可以定义custom action annotations。
但是定义自己的注释有什么好处?就像我们只是添加一个中间人(界面)。
还有一个疑问:在实现动作类时,我们使用泛型来指定相应的接口。是因为Play类型安全吗?在他们提到的文档中,#34; Action定义将注释检索为配置"。是因为我们可以使用自定义注释进行配置吗?
答案 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
动作等。)