org.springframework.core.LocalVariableTableParameterNameDiscoverer类的使用及代码示例

x33g5p2x  于2022-01-24 转载在 其他  
字(11.7k)|赞(0)|评价(0)|浏览(564)

本文整理了Java中org.springframework.core.LocalVariableTableParameterNameDiscoverer类的一些代码示例,展示了LocalVariableTableParameterNameDiscoverer类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。LocalVariableTableParameterNameDiscoverer类的具体详情如下:
包路径:org.springframework.core.LocalVariableTableParameterNameDiscoverer
类名称:LocalVariableTableParameterNameDiscoverer

LocalVariableTableParameterNameDiscoverer介绍

[英]Implementation of ParameterNameDiscoverer that uses the LocalVariableTable information in the method attributes to discover parameter names. Returns null if the class file was compiled without debug information.

Uses ObjectWeb's ASM library for analyzing class files. Each discoverer instance caches the ASM discovered information for each introspected Class, in a thread-safe manner. It is recommended to reuse discoverer instances as far as possible.
[中]ParameterNameDiscoveryr的实现,它使用方法属性中的LocalVariableTable信息来发现参数名称。如果类文件在编译时没有调试信息,则返回null
使用ObjectWeb的ASM库分析类文件。每个发现者实例都以线程安全的方式为每个内省类缓存ASM发现的信息。建议尽可能重用发现者实例。

代码示例

代码示例来源:origin: spring-projects/spring-framework

private BindingContext createBindingContext(String methodName, Class<?>... parameterTypes) throws Exception {
  Object handler = new InitBinderHandler();
  Method method = handler.getClass().getMethod(methodName, parameterTypes);
  SyncInvocableHandlerMethod handlerMethod = new SyncInvocableHandlerMethod(handler, method);
  handlerMethod.setArgumentResolvers(new ArrayList<>(this.argumentResolvers));
  handlerMethod.setParameterNameDiscoverer(new LocalVariableTableParameterNameDiscoverer());
  return new InitBinderBindingContext(this.bindingInitializer, Collections.singletonList(handlerMethod));
}

代码示例来源:origin: wuyouzhuguli/FEBS-Shiro

@Override
public void saveLog(ProceedingJoinPoint joinPoint, SysLog log) throws JsonProcessingException {
  MethodSignature signature = (MethodSignature) joinPoint.getSignature();
  Method method = signature.getMethod();
  Log logAnnotation = method.getAnnotation(Log.class);
  if (logAnnotation != null) {
    // 注解上的描述
    log.setOperation(logAnnotation.value());
  }
  // 请求的类名
  String className = joinPoint.getTarget().getClass().getName();
  // 请求的方法名
  String methodName = signature.getName();
  log.setMethod(className + "." + methodName + "()");
  // 请求的方法参数值
  Object[] args = joinPoint.getArgs();
  // 请求的方法参数名称
  LocalVariableTableParameterNameDiscoverer u = new LocalVariableTableParameterNameDiscoverer();
  String[] paramNames = u.getParameterNames(method);
  if (args != null && paramNames != null) {
    StringBuilder params = new StringBuilder();
    params = handleParams(params, args, Arrays.asList(paramNames));
    log.setParams(params.toString());
  }
  log.setCreateTime(new Date());
  log.setLocation(AddressUtils.getCityInfo(log.getIp()));
  // 保存系统日志
  save(log);
}

代码示例来源:origin: spring-projects/spring-framework

@Override
@Nullable
public String[] getParameterNames(Constructor<?> ctor) {
  Class<?> declaringClass = ctor.getDeclaringClass();
  Map<Member, String[]> map = this.parameterNamesCache.get(declaringClass);
  if (map == null) {
    map = inspectClass(declaringClass);
    this.parameterNamesCache.put(declaringClass, map);
  }
  if (map != NO_DEBUG_INFO_MAP) {
    return map.get(ctor);
  }
  return null;
}

代码示例来源:origin: spring-projects/spring-framework

@Ignore("Ignored because Ubuntu packages OpenJDK with debug symbols enabled. See SPR-8078.")
@Test
public void classesWithoutDebugSymbols() throws Exception {
  // JDK classes don't have debug information (usually)
  Class<Component> clazz = Component.class;
  String methodName = "list";
  Method m = clazz.getMethod(methodName);
  String[] names = discoverer.getParameterNames(m);
  assertNull(names);
  m = clazz.getMethod(methodName, PrintStream.class);
  names = discoverer.getParameterNames(m);
  assertNull(names);
  m = clazz.getMethod(methodName, PrintStream.class, int.class);
  names = discoverer.getParameterNames(m);
  assertNull(names);
}

代码示例来源:origin: spring-projects/spring-framework

@Test
public void staticMethodParameterNameDiscoveryNoArgs() throws NoSuchMethodException {
  Method m = getClass().getMethod("staticMethodNoLocalVars");
  String[] names = discoverer.getParameterNames(m);
  assertNotNull("should find method info", names);
  assertEquals("no argument names", 0, names.length);
}

代码示例来源:origin: spring-projects/spring-framework

public DefaultParameterNameDiscoverer() {
  if (!GraalDetector.inImageCode()) {
    if (KotlinDetector.isKotlinReflectPresent()) {
      addDiscoverer(new KotlinReflectionParameterNameDiscoverer());
    }
    addDiscoverer(new StandardReflectionParameterNameDiscoverer());
    addDiscoverer(new LocalVariableTableParameterNameDiscoverer());
  }
}

代码示例来源:origin: stackoverflow.com

LocalVariableTableParameterNameDiscoverer lcl = 
  new LocalVariableTableParameterNameDiscoverer();
parametersDefinedForMethod = lcl.getParameterNames(method2);
for (String params : parametersDefinedForMethod) {
  System.out.println("Params : "+params);
}

代码示例来源:origin: spring-projects/spring-framework

@Test
public void consParameterNameDiscoveryNoArgs() throws NoSuchMethodException {
  Constructor<TestObject> noArgsCons = TestObject.class.getConstructor();
  String[] names = discoverer.getParameterNames(noArgsCons);
  assertNotNull("should find cons info", names);
  assertEquals("no argument names", 0, names.length);
}

代码示例来源:origin: spring-projects/spring-framework

@Override
@Nullable
public String[] getParameterNames(Method method) {
  Method originalMethod = BridgeMethodResolver.findBridgedMethod(method);
  Class<?> declaringClass = originalMethod.getDeclaringClass();
  Map<Member, String[]> map = this.parameterNamesCache.get(declaringClass);
  if (map == null) {
    map = inspectClass(declaringClass);
    this.parameterNamesCache.put(declaringClass, map);
  }
  if (map != NO_DEBUG_INFO_MAP) {
    return map.get(originalMethod);
  }
  return null;
}

代码示例来源:origin: spring-projects/spring-framework

private WebDataBinderFactory createFactory(String methodName, Class<?>... parameterTypes)
    throws Exception {
  Object handler = new InitBinderHandler();
  Method method = handler.getClass().getMethod(methodName, parameterTypes);
  InvocableHandlerMethod handlerMethod = new InvocableHandlerMethod(handler, method);
  handlerMethod.setHandlerMethodArgumentResolvers(this.argumentResolvers);
  handlerMethod.setDataBinderFactory(new DefaultDataBinderFactory(null));
  handlerMethod.setParameterNameDiscoverer(new LocalVariableTableParameterNameDiscoverer());
  return new InitBinderDataBinderFactory(
      Collections.singletonList(handlerMethod), this.bindingInitializer);
}

代码示例来源:origin: com.github.linkeer8802/api-resolver-core

/**
 * 通过ASM方式获得方法参数信息
 * @param apiMethod
 * @return
 */
private static ApiParamMeta[] getApiParamMetaByASM(Method apiMethod) {
  LocalVariableTableParameterNameDiscoverer parameterNameDiscoverer = 
      new LocalVariableTableParameterNameDiscoverer();
  String[] names = parameterNameDiscoverer.getParameterNames(apiMethod);
  
  if (names != null) {
    ApiParamMeta[] apiParamMetas = new ApiParamMeta[names.length];
    for (int i = 0; i < names.length; i++) {
      apiParamMetas[i] = new ApiParamMeta(names[i]);
    }
    return apiParamMetas;
  }
  return null;
}

代码示例来源:origin: spring-projects/spring-framework

@Test
public void methodParameterNameDiscoveryNoArgs() throws NoSuchMethodException {
  Method getName = TestObject.class.getMethod("getName");
  String[] names = discoverer.getParameterNames(getName);
  assertNotNull("should find method info", names);
  assertEquals("no argument names", 0, names.length);
}

代码示例来源:origin: org.springframework/spring-core

@Override
@Nullable
public String[] getParameterNames(Constructor<?> ctor) {
  Class<?> declaringClass = ctor.getDeclaringClass();
  Map<Member, String[]> map = this.parameterNamesCache.get(declaringClass);
  if (map == null) {
    map = inspectClass(declaringClass);
    this.parameterNamesCache.put(declaringClass, map);
  }
  if (map != NO_DEBUG_INFO_MAP) {
    return map.get(ctor);
  }
  return null;
}

代码示例来源:origin: spring-projects/spring-security

@Test
  public void constructorDiscoverers() {
    discoverer = new DefaultSecurityParameterNameDiscoverer(
        Arrays.asList(new LocalVariableTableParameterNameDiscoverer()));

    List<ParameterNameDiscoverer> discoverers = (List<ParameterNameDiscoverer>) ReflectionTestUtils
        .getField(discoverer, "parameterNameDiscoverers");

    assertThat(discoverers).hasSize(3);
    assertThat(discoverers.get(0)).isInstanceOf(
        LocalVariableTableParameterNameDiscoverer.class);

    ParameterNameDiscoverer annotationDisc = discoverers.get(1);
    assertThat(annotationDisc).isInstanceOf(AnnotationParameterNameDiscoverer.class);
    Set<String> annotationsToUse = (Set<String>) ReflectionTestUtils.getField(
        annotationDisc, "annotationClassesToUse");
    assertThat(annotationsToUse).containsOnly("org.springframework.security.access.method.P", P.class.getName());

    assertThat(discoverers.get(2)).isInstanceOf(
        DefaultParameterNameDiscoverer.class);
  }
}

代码示例来源:origin: com.haulmont.cuba/cuba-core

protected List<MethodParameterInfo> getMethodParameters(Method method) {
  ArrayList<MethodParameterInfo> params = new ArrayList<>();
  Class<?>[] parameterTypes = method.getParameterTypes();
  LocalVariableTableParameterNameDiscoverer parameterNameDiscoverer = new LocalVariableTableParameterNameDiscoverer();
  String[] parameterNames = parameterNameDiscoverer.getParameterNames(method);
  if (parameterTypes != null) {
    for (int i = 0; i < parameterTypes.length; i++) {
      String parameterName = parameterNames != null ? parameterNames[i] : "arg" + i;
      MethodParameterInfo parameterInfo = new MethodParameterInfo(parameterTypes[i].getName(), parameterName, null);
      params.add(parameterInfo);
    }
  }
  return params;
}

代码示例来源:origin: spring-projects/spring-framework

@Test
public void methodParameterNameDiscoveryWithArgs() throws NoSuchMethodException {
  Method setName = TestObject.class.getMethod("setName", String.class);
  String[] names = discoverer.getParameterNames(setName);
  assertNotNull("should find method info", names);
  assertEquals("one argument", 1, names.length);
  assertEquals("name", names[0]);
}

代码示例来源:origin: org.springframework/spring-core

@Override
@Nullable
public String[] getParameterNames(Method method) {
  Method originalMethod = BridgeMethodResolver.findBridgedMethod(method);
  Class<?> declaringClass = originalMethod.getDeclaringClass();
  Map<Member, String[]> map = this.parameterNamesCache.get(declaringClass);
  if (map == null) {
    map = inspectClass(declaringClass);
    this.parameterNamesCache.put(declaringClass, map);
  }
  if (map != NO_DEBUG_INFO_MAP) {
    return map.get(originalMethod);
  }
  return null;
}

代码示例来源:origin: org.springframework/spring-core

public DefaultParameterNameDiscoverer() {
  if (!GraalDetector.inImageCode()) {
    if (KotlinDetector.isKotlinReflectPresent()) {
      addDiscoverer(new KotlinReflectionParameterNameDiscoverer());
    }
    addDiscoverer(new StandardReflectionParameterNameDiscoverer());
    addDiscoverer(new LocalVariableTableParameterNameDiscoverer());
  }
}

代码示例来源:origin: liupeng328/java-api-doc

/**
 * 解析java代码 构建请求参数
 */
private List<ApidocParam> generateParams(Method method, Integer actionId) {
  List<ApidocParam> list = new ArrayList<>();
  //1.得到参数名
  String[] paramNames = new LocalVariableTableParameterNameDiscoverer().getParameterNames(method);
  //2.得到参数类型
  Class<?>[] parameterTypes = method.getParameterTypes();
  //3.得到参数的通用类型
  Type[] genericParameterTypes = method.getGenericParameterTypes();
  //遍历所有参数,解析每个参数
  for (int i = 0; i < parameterTypes.length; i++) {
    //请求参数的类型 只能是 字符串string 数字number 自定义对象 数组(普通数组,对象数组) list map 文件
    isType(list, actionId, paramNames[i], parameterTypes[i], genericParameterTypes[i], null, 0, true, false);
  }
  System.err.println(JsonUtil.toJsonString(list));
  return list;
}

代码示例来源:origin: spring-projects/spring-framework

@Test
public void overloadedStaticMethodInInnerClass() throws Exception {
  Class<InnerClass> clazz = InnerClass.class;
  Method m1 = clazz.getMethod("staticMethod", Long.TYPE);
  String[] names = discoverer.getParameterNames(m1);
  assertNotNull("should find method info", names);
  assertEquals("one argument", 1, names.length);
  assertEquals("x", names[0]);
  Method m2 = clazz.getMethod("staticMethod", Long.TYPE, Long.TYPE);
  names = discoverer.getParameterNames(m2);
  assertNotNull("should find method info", names);
  assertEquals("two arguments", 2, names.length);
  assertEquals("x", names[0]);
  assertEquals("y", names[1]);
}

相关文章