java反射获取注解_java反射机制获取自定义注解值和方法

本文通过一个Java demo展示了如何使用反射机制动态获取带有自定义注解`MethodInterface`的方法及其注解值。首先定义了一个自定义注解,然后创建了一个包含该注解的方法类。接着,通过反射获取类的所有方法,并遍历查找带有注解的方法,提取注解的name属性。最后,将结果存储在`KeyValueDto`列表中并进行排序。这个例子揭示了Java反射的强大功能。
部署运行你感兴趣的模型镜像

由于工作需求要应用到java反射机制,就做了一下功能demo想到这些就做了一下记录

这个demo目的是实现动态获取到定时器的方法好注解名称,废话不多说了直接上源码

1.首先需要自定义注解类

/**

* 自定义方法注解 此时用于定时器注解便于生成方法以及方法的作用

* (获取定时器任务的方法以及名称)

*/

@Documented

@Target({ElementType.METHOD}) //注解应用类型(应用到方法的注解,还有类的可以自己试试)

@Retention(RetentionPolicy.RUNTIME) // 注解的类型

public @interface MethodInterface {

//属性字段名称 默认空字符串

String name() default "";

}

2.创建好自定方法类名就可以创建了

public class TestThtread {

public final Integer NUMBER = 100000;

@MethodInterface(name = "方法注解1")

public void test1(){

System.out.println("方法体1");

}

@MethodInterface(name = "方法注解2")

public void test2(){

System.out.println("方法体2");

}

@MethodInterface(name = "方法注解3")

public void test3(){

System.out.println("方法体3");

}

}

3.最后就是利用java反射机制获取了

public static void testJava() {

Class> printClass = null;

//KeyValueDto是实体类方便返回也可以用map

List list = new ArrayList();

try {

//获取类名的包名地址

printClass = Class.forName("com.lxp.demo.Schedules.TestThtread");

//java反射机制获取所有方法名

Method[] declaredMethods = printClass.getDeclaredMethods();

//遍历循环方法并获取对应的注解名称

for (Method declaredMethod : declaredMethods) {

String isNotNullStr = "";

// 判断是否方法上存在注解 MethodInterface

boolean annotationPresent = declaredMethod.isAnnotationPresent(MethodInterface.class);

if (annotationPresent) {

// 获取自定义注解对象

MethodInterface methodAnno = declaredMethod.getAnnotation(MethodInterface.class);

// 根据对象获取注解值

isNotNullStr = methodAnno.name();

}

list.add(new KeyValueDto(declaredMethod.getName(),isNotNullStr));

}

//排序(按照方法名称排序)

Collections.sort(list);

System.out.println(list.toString());

} catch (Exception e) {

e.printStackTrace();

}

}

实体类 KeyValueDto

public class KeyValueDto implements Comparable{

private String key;

private String value;

public KeyValueDto(String key, String value) {

this.key = key;

this.value = value;

}

public String getKey() {

return key;

}

public void setKey(String key) {

this.key = key;

}

public String getValue() {

return value;

}

public void setValue(String value) {

this.value = value;

}

@Override

public int compareTo(KeyValueDto o) {

return o.getKey().compareTo(this.key);

}

@Override

public String toString() {

return "{" +

"key='" + key + '\'' +

", value='" + value + '\'' +

'}';

}

}

4.最后一步就是测试和结果了

public static void main(String[] args) {

testJava();

}

b5f133a02a2a41f18af1a9072851a409.png

看完这个是不是感觉java反射机制很清晰,我就感觉很强大,虽然这个是冰山一角,但是这个也是花了点时间就分享一下,有兴趣可以留言讨论下更多的

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值