java反射获取注解_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反射机制很清晰,我就感觉很强大,虽然这个是冰山一角,但是这个也是花了点时间就分享一下,有兴趣可以留言讨论下更多的


版权声明:本文为weixin_33356324原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。