由于工作需求要应用到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<KeyValueDto> 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<KeyValueDto>{
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();
}

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


												

java反射机制获取自定义注解值和方法的更多相关文章

  1. Java反射机制获取Class文件

    JAVA反射机制是在运行状态中,对于任意一个类(class文件),都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象方法的功能称为 ...

  2. Java反射机制(获取Class对象的三种方式+获取Class中的构造函数进行对象的初始化+获取反射类的字段+获取反射类的一般方法)

    反射技术其实就是动态加载一个指定的类,并获取该类中的所有内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员,简单来说:反射技术可以对一个类进行解剖,反射大大增强 ...

  3. 1个比较简单的使用java反射机制获取前台数据进行数据封装的例子

    //利用反射机制 和 从request获取所有参数的形式来构建查询对象 CustomerChooseSearchParma searchObject = new CustomerChooseSearc ...

  4. 通过java反射机制获取该类的所有属性类型、值

    转自:http://blog.csdn.net/sd4000784/article/details/7448221 方法使用了这俩个包下的 field 和method import Java.lang ...

  5. 运用java反射机制获取实体方法报错,java.lang.NoSuchMethodException: int.<init>(java.lang.String)

    错误的原因是我的Student实体,成员变量数据类型,使用了int基本数据类型,改成Integer包装类型即可.

  6. kettle job如何利用java的反射机制获取执行的sql语句

    kettle job中的JavaScript如何获取同一个job中SQL步骤的执行语句并让执行语句记录在日志中呢?首先写日志需要用到job中JavaScript写日志的方法,其次是利用java反射机制 ...

  7. Java反射机制--笔记

    1.认识Class类 任何一个类都是Class类的实例对象,这个实例对象有三种表示方式. /*java 反射机制*/ // 获取类的方法 UserDao userDao = new UserDao() ...

  8. Java 基础之详解 Java 反射机制

    一.什么是 Java 的反射机制?   反射(Reflection)是Java的高级特性之一,是框架实现的基础,定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: ...

  9. Java——反射机制

    反射概念: Java反射是Java被视为动态(或准动态)语言的一个关键性质.这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifier ...

随机推荐

  1. String方法总结

    蓝背景为与Array相同的方法 一.字符方法 charAt(index):返回在指定位置的字符. var str="abcdefg"; //undefined str[0] //& ...

  2. Method for browsing internet of things and apparatus using the same

    A method for browsing Internet of things (IoT) and an apparatus using the same are provided. In the ...

  3. libuv 中文编程指南

    最近看了一些有关 libuv 的东西,另外复习了一些与同步.异步.阻塞.非阻塞,异步IO(aio)的东西, 算是技术积累吧,等有时间了整理出一个完整的文档出来,希望在今后的编程中用到. 不多说了,本文 ...

  4. Linux性能测试 命令大全

    Linux 系统出现问题时,我们不仅需要查看系统日志信息,而且还要使用大量的性能监测工 具来判断究竟是哪一部分(内存.CPU.硬盘……)出了问题.在 Linux 系统中,所有的运行 参数保存在虚拟目录 ...

  5. 整型转字符串(convert int to char)优化实践——一个意外的BUG

    convert_int_to_char函数在使用时出现过一个BUG. 当使用值是13200020099时,返回的字符串是"13200020111",结果是错误的. 在gcc编译器里 ...

  6. Raw-OS备用事件源代码分析

    作为分析的内核版本2014-04-15,基于1.05正式版,blogs我们会跟上的内核开发进度的最新版本,如果出现源代码的目光"???"的话.没有深究的部分是理解. Raw-OS官 ...

  7. Vertica变化Local时间到GMT时间

    在Vertica的数据库的使用过程中碰到这么一种场景.程序从不同一时候区的集群中收集数据写入同一张表,然后我们须要把这些数据依照GMT时间来显示. 此时我们能够通过Vertica提供TIME ZONE ...

  8. requirejs教程(一):基本用法

    介绍 RequireJS是一个非常小巧的JavaScript模块载入框架,是AMD规范最好的实现者之一.最新版本的RequireJS压缩后只有14K,堪称非常轻量.它还同时可以和其他的框架协同工作,使 ...

  9. 基于Spring开发

    1. XML Schema 1.1 最简单的标签 一个最简单的标签,形式如: <bf:head-routing key="1" value="1" to= ...

  10. Win8 Metro(C#)数字图像处理--2.68图像最小值滤波器

    原文:Win8 Metro(C#)数字图像处理--2.68图像最小值滤波器 /// <summary> /// Min value filter. /// </summary> ...