
@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); } } } 1 madworks 2020 年 10 月 28 日 你这样试一下,entry.getValue().getClass().getAnnotation(FeignClient.class) |
3 leejoker 2020 年 10 月 28 日 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)); } }); |
4 leejoker 2020 年 10 月 28 日 大概是这样,spring 里的 bean 是通过代理的方式注册的,需要用代理的方式去获取。 代码是从我写的工具里截取的: https://github.com/leejoker/feign-dev-tool-starter |
6 DreamSpace 2020 年 10 月 28 日 @leejoker 老哥发的链接好像是个 private repository,看不到具体的代码实现 |
7 leejoker 2020 年 10 月 28 日 是的 XD,已经改了 |
8 leejoker 2020 年 10 月 28 日 |