zoukankan      html  css  js  c++  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)│
                     └────────────────────┘
    
  • 相关阅读:
    纠结
    oracle大批量数据更新
    SQL Server 2008 “因为数据库正在使用,所以无法获得对数据库的独占访问权”解决方法
    面试总结
    Oracle 存储过程发送邮件
    ASP.NET页面之间传递值的几种方法<转>
    模式窗口里面,服务器控件添加确认操作时,又弹出新窗口
    深入研究Asp.net页面的生命周期<转>
    asp.net用jquery为服务器控件添加javascript处理
    sqlserver 把对象发布成webservice遇到的问题
  • 原文地址:https://www.cnblogs.com/iiiiiher/p/12935562.html
Copyright © 2011-2022 走看看