当前位置:首页 > JAVA > 正文内容

java使用自定义注解功能实现路由注解

高老师1年前 (2023-08-22)JAVA557

在构建路由框架的过程中,我们需要以下几个主要的步骤:

1. 定义自定义注解

首先,我们定义一个名为Router的自定义注解,用于标记控制器方法并映射方法和URL路径。这个注解包含两个属性:name表示接口名称,path表示接口地址。

package com.learn.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

// Target注解设置Router注解只可用于方法中
@Target(ElementType.METHOD)

// Retention注解设置Router只可用于运行时
@Retention(RetentionPolicy.RUNTIME)
public @interface Router {
    /**
     * 接口名称
     */
    String name();

    /**
     * 接口地址
     */
    String path();
}

2. 创建控制器类

接下来,我们创建一个控制器类ApiController,其中包含用Router注解标记的不同接口方法。

package com.learn.controller;

import com.learn.annotation.Router;

public class ApiController {

    /**
     * 注册接口
     */
    @Router(name = "注册接口", path = "/api/register")
    public void register() {
        System.out.println("注册成功");
    }

    /**
     * 登录接口
     */
    @Router(name = "登录接口", path = "/api/login")
    public void login() {
        System.out.println("登录成功");
    }
}

3. 使用反射获取注解信息

在入口函数中,我们使用反射来获取控制器中的所有方法,并提取使用了Router注解的方法的信息,包括接口名称、接口地址和调用的方法名。

import com.learn.annotation.Router;
import java.lang.reflect.Method;

public class Main {

    public static void main(String[] args) throws ClassNotFoundException {
        // 假设整个系统所有的控制器都需要写在ApiController中
        String className = "com.learn.controller.ApiController";

        //  获取反射对象
        Class<?> clazz = Class.forName(className);

        // 获取对象的全部方法
        Method[] methods = clazz.getMethods();

        // 循环对象所有方法
        for (Method method : methods) {
            // 检查方法是否包含Router注解
            if (method.isAnnotationPresent(Router.class)) {
                // 读取方法的注解信息
                Router router = method.getAnnotation(Router.class);

                // 提取接口名称信息
                String apiName = router.name();

                // 提取接口地址信息
                String apiPath = router.path();

                // 提取接口方法名称
                String funcName = method.getName();

                // 输出信息
                StringBuilder sb = new StringBuilder();
                sb.append("接口名称:" + apiName + "\r\n");
                sb.append("接口地址:" + apiPath + "\r\n");
                sb.append("调用方法:" + funcName + "\r\n");
                System.out.println(sb.toString());
            }
        }

    }
}

总结

在这篇博客中,我们演示了如何使用自定义注解和反射获取每个路由地址指向的控制器方法,由于篇幅原因不再去编写http请求部分和解析url部分。如果你有任何疑问或想要更进一步的讨论,请随时提问!

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.5b1.cn/post/462.html

分享给朋友:

“java使用自定义注解功能实现路由注解” 的相关文章

Java不用编译直接执行

Java不用编译直接执行

public class test {     public static void main(String[] args) {     &...

java编译编码问题,java编译执行时编码问题

java编译编码问题,java编译执行时编码问题

public class test {     public static void main(String[] args) {     &...

java一个类可以有多个构造方法

java一个类可以有多个构造方法

java一个类可以有多个构造方法,根据传参类型和个数来匹配执行哪个构造方法。public class Member {     public Member(){      ...

java限制1个方法同一时间只能被一个线程访问

java限制1个方法同一时间只能被一个线程访问

java限制1个方法同一时间只能被一个线程访问public synchronized void setOrderPay(){ }加上synchronized 修饰符即可...

java final 修饰符,java通过final修饰符创建常量,,java通过final修饰符声明方法不可被修改

java final 修饰符,java通过final修饰符创建常量,,java通过final修饰符声明方法不可被修改

(1).final 修饰符通常和 static 修饰符一起使用来创建类常量。(2).父类中的 final 方法可以被子类继承,但是不能被子类重写,声明 final 方法的主要目的是防止该方法的内容被修改。public class Member {   ...

java增强型for循环

java增强型for循环

Java5 引入了一种主要用于数组的增强型 for 循环,类似js中的for inpublic class Member {     public static void main(String[]&...