ParamNameResolver是一个参数名解析器,负责把方法的参数按顺序解析出来并进行标注。
1.因为设计到字符串处理,随便写一个方法进行debug跟踪
ParamNameResolver在构造器中对getUserInfo进行解析,逻辑很简单,获取该方法所有参数类型进行遍历,如果该参数上有@Param注解就获取Param中的value作为属性名,没有的话就判断配置中useActualParamName是否允许使用原始参数名,不允许就用参数顺序进行命名。最后把解析结果存到ParamNameResolver的names属性中。
// 方法入参的参数次序表。键为参数次序,值为参数名称或者参数@Param注解的值
private final SortedMap<Integer, String> names;
// 该方法入参中是否含有@Param注解
private boolean hasParamAnnotation;
/**
* 参数名解析器的构造方法
* @param config 配置信息
* @param method 要被分析的方法
*/
public ParamNameResolver(Configuration config, Method method) {
// 获取参数类型列表
final Class<?>[] paramTypes = method.getParameterTypes();
// 准备存取所有参数的注解,是二维数组
final Annotation[][] paramAnnotations