跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 如何扫描项目中所有 FeignClient 的注解属性信息
未分類
29 10 月 2020

如何扫描项目中所有 FeignClient 的注解属性信息

如何扫描项目中所有 FeignClient 的注解属性信息

資深大佬 : sunzy 1

@FeignClient 不是有一些如 name 、url 等的属性信息么 通过applicationContext.getBeansWithAnnotation(FeignClient.class)可以拿到 @FeignClient 的所有 bean 但是由于 @FeignClient 都是 interface,通过getAnnotations()拿不到注解的属性信息, 代码如下,求大神指点一下

        Map<String,Object> beans = applicationContext.getBeansWithAnnotation(FeignClient.class);         if (beans.size() > 0){             for (Map.Entry<String, Object> entry : beans.entrySet()){                 String beanName = entry.getKey();                 Annotation[] annotations = entry.getValue().getClass().getAnnotations(); //空的                 AnnotatedType[] annotatedTypes = entry.getValue().getClass().getAnnotatedInterfaces();                 for(AnnotatedType annotationType : annotatedTypes){                     Type type = annotationType.getType();                     Annotation[] typeAnnotations = type.getClass().getAnnotations(); //空的                     Annotation[] annotationTypeAnnotations = annotationType.getAnnotations(); //空的                     Annotation[] declaredAnnotations = annotationType.getDeclaredAnnotations(); //空的                     System.out.println(annotationTypeAnnotations);                     System.out.println(declaredAnnotations);                 }             }         } 

大佬有話說 (8)

  • 資深大佬 : madworks

    你这样试一下,entry.getValue().getClass().getAnnotation(FeignClient.class)

  • 主 資深大佬 : sunzy

    @madworks 试了,是 null

  • 資深大佬 : leejoker

    beans.forEach((k, v) -> {
    try {
    if (Proxy.isProxyClass(v.getClass())) {
    InvocationHandler ih = Proxy.getInvocationHandler(v);
    Field targetField = ih.getClass().getDeclaredField(“target”);
    targetField.setAccessible(true);

    Target target = (Target) targetField.get(ih);
    Field nameField = target.getClass().getDeclaredField(“name”);
    nameField.setAccessible(true);

    String clientName = (String) nameField.get(target);

    Field urlField = target.getClass().getDeclaredField(“url”);
    urlField.setAccessible(true);
    String url = (String) urlField.get(target);

    System.out.println(“clientName: ” + clientName);
    System.out.println(“url: ” + url);
    }
    } catch (Exception e) {
    log.error(“失败,exception={}”, ExceptionUtils.getStackTrace(e));
    }
    });

  • 資深大佬 : leejoker

    大概是这样,spring 里的 bean 是通过代理的方式注册的,需要用代理的方式去获取。
    代码是从我写的工具里截取的: https://github.com/leejoker/feign-dev-tool-starter

  • 主 資深大佬 : sunzy

    @leejoker 多谢大佬

  • 資深大佬 : DreamSpace

    @leejoker 老哥发的链接好像是个 private repository,看不到具体的代码实现

  • 資深大佬 : leejoker

    是的 XD,已经改了

  • 資深大佬 : leejoker

    @DreamSpace

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具