本文收录于专栏 Nacos
推荐阅读:Nacos 架构 & 原理
前言
阅读Nacos
源码时,经常看到 Controller
中有@ExtractorManager.Extractor
这么一个注解。那么它的作用是什么?
一、@ExtractorManager.Extractor
Module: core
我们来逐步看下源码
@Target({
ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Extractor {
Class<? extends AbstractHttpParamExtractor> httpExtractor() default DefaultHttpExtractor.class;
Class<? extends AbstractRpcParamExtractor> rpcExtractor() default DefaultGrpcExtractor.class;
}
- 这段代码定义了
Extractor
注解,允许在类或方法上配置自定义的参数提取器。 - @Target 指定了该注解可以应用于类型(类、接口等)或方法。
- @Retention 表明注解在运行时可用。
- @Documented 表示该注解可以包含在 javadoc 中。
httpExtractor
和rpcExtractor
分别指定了默认的 HTTP 和 gRPC 参数提取器类。
public static class DefaultHttpExtractor extends AbstractHttpParamExtractor {
@Override
public List<ParamInfo> extractParam(HttpServletRequest params) {
return Collections.emptyList();
}
}
public static class DefaultGrpcExtractor extends AbstractRpcParamExtractor {
@Override
public List<