Spring mvc之ParameterNameDiscover
2021-04-14 本文已影响0人
engineer_tang
1. 定义
接口来发现方法和构造函数的参数名。
参数名发现并不总是可能的,但是可以尝试各种策略,例如查找可能在编译时发出的调试信息,以及查找可选的伴随AspectJ注释方法的argname注释值。
接口定义如下:
public interface ParameterNameDiscoverer {
@Nullable
String[] getParameterNames(Method method);
@Nullable
String[] getParameterNames(Constructor<?> ctor);
}
从接口中声明的方法可以知道,这是两个重载方法,只是方法的参数类型的不同。
1.1 getParameterNames(Method method)方法
返回方法的参数名,如果无法确定,则返回null。
如果参数名仅对给定方法的某些参数可用,而对其他参数不可用,则数组中的单个条目可能为空。但是,建议在可行的情况下改用存根参数名。
1.2 getParameterNames(Constructor<?> ctor)方法
返回构造函数的参数名,如果无法确定,则返回null。
如果参数名仅适用于给定构造函数的某些参数,而不适用于其他参数,则数组中的单个条目可能为空。但是,建议在可行的情况下改用存根参数名。
2. 实现类
image.png除图中的实现类外,还有AbstractAspectJAdvisorFactory的内部类AspectJAnnotationParameterNameDiscoverer和LocalVariableTableParameterNameDiscoverer类。