JAVA在不确定具体 Annotation 类型时,获得注解参数
Posted 高因咖啡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA在不确定具体 Annotation 类型时,获得注解参数相关的知识,希望对你有一定的参考价值。
package com.lzw.demo; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } @RestController @RequestMapping(path = "/a") public static class A { @GetMapping(path = "/find") public void add() { System.out.println("find"); } @DeleteMapping(path = "/delete") public void delete() { System.out.println("delete"); } } @RestController @RequestMapping(path = "/b") public static class B { @PutMapping(path = "/update") public void update() { System.out.println("update"); } @PostMapping(path = "/add") public void add() { System.out.println("add"); } } /** * Created by laizhenwei on 2018-1-29 22:48:49. */ @Component public static class appStartUp implements CommandLineRunner { @Autowired private RequestMappingHandlerMapping requestMappingHandlerMapping; @Override public void run(String... strings){ Class<Annotation>[] annoClz = new Class[]{RequestMapping.class, PostMapping.class, GetMapping.class, DeleteMapping.class, PutMapping.class}; Map<RequestMappingInfo, HandlerMethod> map = requestMappingHandlerMapping.getHandlerMethods(); List<Class<?>> beanTypes = map.keySet() .stream().filter(info -> map.get(info) .getBeanType().getAnnotation(RequestMapping.class) != null) .collect(Collectors.toList()) .stream().map(i -> map.get(i).getBeanType()) .collect(Collectors.toList()); beanTypes.forEach(t -> Arrays.stream(t.getMethods()).forEach(method -> { for (int i = 0; i < annoClz.length; i++) { Annotation mappingAnno = method.getAnnotation(annoClz[i]); if (mappingAnno != null) { try { InvocationHandler invocationHandler = Proxy.getInvocationHandler(mappingAnno); Field value = invocationHandler.getClass().getDeclaredField("memberValues"); value.setAccessible(true); Map<String, Object> memberValues = (Map<String, Object>) value.get(invocationHandler); System.out.println(Arrays.toString(((String[]) memberValues.get("path")))); } catch (Exception ex) { ex.printStackTrace(); } } } } )); } } }
以上是关于JAVA在不确定具体 Annotation 类型时,获得注解参数的主要内容,如果未能解决你的问题,请参考以下文章