15. Spring源码篇之获取方法参数名
简介
通常在没有显示的指定beanName的时候,都是会根据要注入的类型以及方法名,属性名或者参数名来找Bean,方法名属性名还好说,但是参数名就有点难获取,jdk也并没有给我们提供获取的方法
在Spring中主要以两种方式来获取,一是反射,这种可能获取不到,二是本地变量表,通过asm的方式,这种肯定是可以获取到
spring提供的这两种方式我们平时也可以使用,spring中也会大量使用到
为了更容易后面看源码,本文西安介绍这两种方式
使用测试
public class ParameterNameDiscovererTest {
public static void main(String[] args) throws NoSuchMethodException {
// 反射方式
StandardReflectionParameterNameDiscoverer nameDiscoverer = new StandardReflectionParameterNameDiscoverer();
// 本地变量表
LocalVariableTableParameterNameDiscoverer localVariableTableParameterNameDiscoverer = new LocalVariableTableParameterNameDiscoverer();
Method method = ParameterNameDiscovererTest.class.getDeclaredMethod("Name", String.class);
System.out.println(Arrays.toString(nameDiscoverer.getParameterNames(method)));
System.out.println(Arrays.toString(localVariableTableParameterNameDiscoverer.getParameterNames(method)));
}
public void Name(String name) {
}
}
执行输出
null
[name]
上面主要以一个例子来熟悉下spring获取方法参数名的方式,后面分析源码会更加容易看懂
欢迎关注,学习不迷路!