🍇 组合注解
Forest 除了能用生命周期来自定义注解外,也允许您把已有的 Forest 注解组合成一个新的注解
# 组合一个注解
/**
* 用Forest组合注解实现一个自定义的请求头注解
* 此注解加上了 @Headers 注解,并为注解的参数赋了值
* 那么以后使用此注解的接口和方法,会自动添加上 @Headers 注解以及它的参数值
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
// 被组合的注解
@Headers({
"Accept: text/plain",
"Content-Type: application/json",
// 在组合注解中可以在模板字符串中引用变量
// 它会从全局变量或方法的参数中获取变量值
"Token: ${token}"
})
public @interface MyHeaders {
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
使用组合注解的方法
// 该方法使用了自定义的组合注解 @MyHeaders
// 所以该方法发送的请求会自动添加以下请求头:
// Accept: text/plain
// Content-Type: application/json
// Token: xxx (从形参 token 中传入的值)
@Get("/data")
@MyHeaders
String getData(@Var("token") String token);
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 组合多个注解
Forest 还可以组合2个及2个以上的 Forest 注解
/**
* Forest 可以同时组合多个注解
* 如方法使用该自定义的 @MySite 注解
* 那么就等同使用这里被组合的 @Headers 注解和 @Address 注解
* 以及它们的参数值
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
// 组合第一个注解
@Headers({
"Accept: text/plain",
"Content-Type: application/json"
})
// 组合第二个注解
// 可以从全局变量或方法参数中获取变量值
@Address(host = "${my-site.host}", port = "${my-site.port}")
public @interface MySite {
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
注意
定义组合注解的时候要注解不要组合自身,以及组合过自身的其它注解,以免引起循环引用
帮助我们改善此文档 (opens new window)
上次更新: 2023/06/19, 17:37:19