[java]框架中为什么用到反射?

时间:2020-05-22
本文章向大家介绍[java]框架中为什么用到反射?,主要包括[java]框架中为什么用到反射?使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

反射 注解的使用

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface GetMapping {
    String value();
}

public class MyTest {
    public static void main(String[] args) throws Exception {
        Class<A> aClass = A.class;
        for (Method method : aClass.getMethods()) {
            if (method.getAnnotation(GetMapping.class) != null) {

                //获取参数类型
                for (Class<?> parameterType : method.getParameterTypes()) {
                    System.out.println(parameterType);
                }

                //参数名
                for (Parameter parameter : method.getParameters()) {
                    System.out.println(parameter.getName());
                }
                //获取返回值类型
                System.out.println(method.getReturnType());
                //获取注解value
                System.out.println(method.getAnnotation(GetMapping.class).value());
            }
        }

    }
}

class A {
    public A() {
    }

    @GetMapping("/index")
    public void show(String name, Integer age) {
        System.out.println("A.show");
    }
}

框架中用反射

关键点在于扩展: 反射会自动帮忙整理.

试想如果没有反射怎么做? 先定义一个map. 添加若干controller. 每次添加一个controller 都得改一下路由map. 显得麻烦.
前端访问时,根据约好的controller path来访问即可.

有没有一种办法, 让我专注于我的controller. 路由之类的别来烦我. springmvc的做法是全局创建一个controller. 用反射调用方法

servlet生命周期的init. 当servlet创建时会被自动执行.

   HTTP Request    ┌─────────────────┐
──────────────────>│DispatcherServlet│
                   └─────────────────┘
                            │
               ┌────────────┼────────────┐
               ▼            ▼            ▼
         ┌───────────┐┌───────────┐┌───────────┐
         │Controller1││Controller2││Controller3│
         └───────────┘└───────────┘└───────────┘
               │            │            │
               └────────────┼────────────┘
                            ▼
   HTTP Response ┌────────────────────┐
<────────────────│render(ModelAndView)│
                 └────────────────────┘

原文地址:https://www.cnblogs.com/iiiiiher/p/12935562.html