zoukankan      html  css  js  c++  java
  • 利用反射调用注解,模仿Spring

    简介

    在开发中,我们经常用的就是利用@RequestMapping来调用我们自己的逻辑,现在我们来创建属于自己的注解模仿一下它。

    1.新建属于自己的注解@SeayaMapping

    @Target({ElementType.METHOD, ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface SeayaMapping {
        String value();
    }
    

    2.创建类使用@SeayaMapping标注

    @SeayaMapping("/say")
    public class SeayaTest {
        
        @SeayaMapping("/hello")
        public void sayHello(String s){
            System.out.println(s);
        }
    }
    

    3.创建好之后,假如现在客户端访问http://localhost:8080/say/hello, 当我们已经在服务端获取到这个请求时,就需要调用这个方法。

    首先我们得拿到包下所有的类,主要是通过启动类获取包名,在通过包名获取所有类。通过包名获取所有类.

    接下来就是遍历每一个类,如果这个类有@SeayaMapping注解,那个再获取这个类的所有方法,然后遍历所有方法,如果方法有@SeayaMapping注解,利用invoke()方法来执行。

    写出来就变成这样了,好可怕的代码。。。

    for ( Class<?> aClass:
            classes) {
        for ( Annotation classA:
                aClass.getAnnotations()) {
            if (classA instanceof SeayaMapping && ((SeayaMapping) classA).value().equals("/say")){
                for (Method m :
                        aClass.getMethods()) {
                    for (Annotation a :
                            m.getAnnotations()) {
                        if (a instanceof SeayaMapping && ((SeayaMapping) a).value().equals("/hello"))
                            m.invoke(aClass.newInstance(),"Ok beng");
                    }
    
                }
            }
        }
    }
    
  • 相关阅读:
    10_14 drf接口框架。
    10_11 vue路由跳转
    10_10,vue项目环境搭建
    10_9vue循环指令与组件
    10_8 vue的导入
    9_25中间键与登录认证
    块级元素居中问题
    2019牛客多校第五场 F maximum clique 1 状压dp+最大独立集
    2019牛客多校第五场C generator 2 hash,bsgs模板
    2019牛客多校第五场B generator 十进制快速幂
  • 原文地址:https://www.cnblogs.com/bihanghang/p/10210568.html
Copyright © 2011-2022 走看看