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<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反射机制获取自定义注解值和方法的更多相关文章
- Java反射机制获取Class文件
JAVA反射机制是在运行状态中,对于任意一个类(class文件),都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象方法的功能称为 ...
- Java反射机制(获取Class对象的三种方式+获取Class中的构造函数进行对象的初始化+获取反射类的字段+获取反射类的一般方法)
反射技术其实就是动态加载一个指定的类,并获取该类中的所有内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员,简单来说:反射技术可以对一个类进行解剖,反射大大增强 ...
- 1个比较简单的使用java反射机制获取前台数据进行数据封装的例子
//利用反射机制 和 从request获取所有参数的形式来构建查询对象 CustomerChooseSearchParma searchObject = new CustomerChooseSearc ...
- 通过java反射机制获取该类的所有属性类型、值
转自:http://blog.csdn.net/sd4000784/article/details/7448221 方法使用了这俩个包下的 field 和method import Java.lang ...
- 运用java反射机制获取实体方法报错,java.lang.NoSuchMethodException: int.<init>(java.lang.String)
错误的原因是我的Student实体,成员变量数据类型,使用了int基本数据类型,改成Integer包装类型即可.
- kettle job如何利用java的反射机制获取执行的sql语句
kettle job中的JavaScript如何获取同一个job中SQL步骤的执行语句并让执行语句记录在日志中呢?首先写日志需要用到job中JavaScript写日志的方法,其次是利用java反射机制 ...
- Java反射机制--笔记
1.认识Class类 任何一个类都是Class类的实例对象,这个实例对象有三种表示方式. /*java 反射机制*/ // 获取类的方法 UserDao userDao = new UserDao() ...
- Java 基础之详解 Java 反射机制
一.什么是 Java 的反射机制? 反射(Reflection)是Java的高级特性之一,是框架实现的基础,定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: ...
- Java——反射机制
反射概念: Java反射是Java被视为动态(或准动态)语言的一个关键性质.这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifier ...
随机推荐
- 【oracle ocp 知识点二】
1.数据库操作语言 DML在运行时下面的语句 添加一个新行到表 更新表现出一定的线 从表删除现有行 一个事务处理是由一系列的DML语句逻辑组成 A.insert 每次插入一行数据 字符和日期的须要单引 ...
- 拦截和跟踪HTTP请求的主要方法及实现
一.HTTP 请求的拦截技术可以广泛地应用在反向代理.拦截 Ajax 通信.网页的在线翻译.网站改版重构等方面.而拦截根据位置可以分为服务器端和客户端两大类,客户端拦截借助 JavaScript 脚本 ...
- 【转】java内部类的作用分析
转自:http://blog.csdn.net/ilibaba/article/details/3866537 另收另外一篇有空的时候看:http://jinguo.iteye.com/blog/71 ...
- Linux性能测试 mpstat命令
mpstat是MultiProcessor Statistics的缩写,是实时系统监控工具.其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中.在多CPUs系统里,其不但能查看所有 ...
- 努比亚Z7 mini刷机教程_recovery卡刷机教程
之前小编分享努比亚Z7 mini电话访问Root权限.recovery刷机教程. 所以对于朋友谁搞机整机的爱,左边是写第三方手机刷包.那么下面刷的家小编与您分享努比亚Z7 mini刷机教程手机. 一. ...
- C# TSF 输入法的获取
原文 C# TSF 输入法的获取 起因: 「添雨跟打器」中存在一个问题.在 windows 8/10 里面,输入法就获取不到了.我一直没有去管这样的问题.但是也大致知道,可能是 TSF 架构的问题. ...
- Android在putString和getString使用方法
函数: putString(String key,String value); 功能:将键为key的值为value. 详细的容器详细考虑比如对于Editor 的对象来讲: 代码例如以下: 首先新建一个 ...
- HDU 3172 Virtual Friends 并与正确集中检查 -秩
ll T; while(~scanf("%d",&T)){ while(T--) { = = ... 思路: 用秩合并,看了题解才发现 if(fx == fy)要输出当前集 ...
- GTK+浅谈之一Windows10下QtCreator中GTK+环境搭建(十几篇)
一.简介 虽然GTK+是Linux下的开发环境,因为其跨平台特性,有时候需要在Windows上用到它的.如下是在Windows10下配置GTK+的开发环境. Gnome的开发基础结构是围 ...
- [转帖 ]MySQL 5.7 新特性 JSON
MySQL 5.7 新特性 JSON 的创建,插入,查询,更新 作者: 我不是鱼 (2016-08-31 16:13)分类: MySQL 标签: MySQL JSON MySQL JSON 应用 ...