调用者Class 及 method

StackTraceElement stacks[] = Thread.currentThread().getStackTrace();
for (StackTraceElement stack : stacks) {
String className = stack.getClassName();
if (className.contains("com.upsoft")
&& className.contains("Controller")) {
className = className.substring(className.lastIndexOf(".") + 1,
className.length());
String methodName = stack.getMethodName();
}
}

反射(get)

// 通过反射 遍历实体所有属性,找出发生改变的字段及修改前和修改后的值
Field[] fields = entity.getClass().getDeclaredFields();
for (int i = 0; i < fields.length; i++) { changeColumn = new ColumnChangeBean();
String attrName = fields[i].getName();
Class<?> attrType = fields[i].getType();
Method method = getGetMethod(entity.getClass(), attrName); try { Object oldValue = null;
Object newValue = null; // 通过反射获取 oldValue 和 newValue 的值
if (oldEntity != null) {
oldValue = method.invoke(oldEntity, new Object[0]);
}
newValue = method.invoke(entity, new Object[0]); } catch (Exception e) {
e.printStackTrace();
}
}
    private Method getGetMethod(Class objectClass, String fieldName) {
StringBuffer sb = new StringBuffer();
sb.append("get");
sb.append(fieldName.substring(0, 1).toUpperCase());
sb.append(fieldName.substring(1));
try {
return objectClass.getMethod(sb.toString());
} catch (Exception e) {
}
return null;
}

反射(set)

public static void invokeSet(Object o, String fieldName, Object value) {       

    Method method = getSetMethod(o.getClass(), fieldName);       

    try {       

        method.invoke(o, new Object[] { value });       

    } catch (Exception e) {       

        e.printStackTrace();       

    }       

}

public static Method getSetMethod(Class objectClass, String fieldName) {       

    try {       

        Class[] parameterTypes = new Class[1];       

        Field field = objectClass.getDeclaredField(fieldName);       

        parameterTypes[0] = field.getType();       

        StringBuffer sb = new StringBuffer();       

        sb.append("set");       

        sb.append(fieldName.substring(0, 1).toUpperCase());       

        sb.append(fieldName.substring(1));       

        Method method = objectClass.getMethod(sb.toString(), parameterTypes);       

        return method;       

    } catch (Exception e) {       

        e.printStackTrace();       

    }       

    return null;       

} 

获取类注解信息

Annotation[] annotations = entity.getClass().getAnnotations();
for (int i = 0; i < annotations.length; i++) {
String annoStr = annotations[i].toString();
if (annoStr.contains("@javax.persistence.Table")) {
annoStr = annoStr.substring(annoStr.lastIndexOf("name=") + 5);
while (annoStr.contains(",")) {
annoStr = annoStr.substring(0, annoStr.lastIndexOf(","));
}
tableName = annoStr;
}
}

获取方法、属性注解

Field[] fields = entity.getClass().getDeclaredFields();

        // 遍历Bean属性
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
String attrName = field.getName();
// 获取属性对应的get方法
Method method = getGetMethod(entity.getClass(), attrName); Annotation[] attrAnnotations = field.getAnnotations();
Annotation[] methodAnnotations = method.getAnnotations(); }

获取调用者Class和method、反射获取get方法、获取注解信息的更多相关文章

  1. C# 知识点笔记:IEnumerable<>的使用,利用反射动态调用方法

    IEnumerable<T>的使用 创建一个IEnumerable对象 List<string> fruits = new List<string> { " ...

  2. java进阶之反射:反射基础之如何获取一个类以及如何获取这个类的所有属性和方法(2)

    当我们知道一个类的对象,或者知道一个类的路径,或者指导这个类的名称的时候我们可以获取到这个类的类对象 当我们仅仅知道一个类的类对象的时候我们依然无法操作这个类,因为我们不知道这个类的属性,类的方法.那 ...

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

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

  4. java反射之获取所有方法及其注解(包括实现的接口上的注解),获取各种标识符备忘

    java反射之获取类或接口上的所有方法及其注解(包括实现的接口上的注解) /** * 获取类或接口上的所有方法及方法上的注解(包括方法实现上的注解以及接口上的注解),最完整的工具类,没有现成的工具类 ...

  5. 反射工具类.提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,被AOP过的真实类等工具函数.java

    import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Validate; import org.ap ...

  6. XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)

    XML序列化   #region 序列化 /// <summary> /// XML序列化 /// </summary> /// <param name="ob ...

  7. 【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】

    方法1:通过get()方法获取属性值 package com.sxd.test.controller; public class FirstCa{ private Integer num; priva ...

  8. 反射与类对象获取-Java学习

    类对象 类对象指的是一个类在jvm中加载后所形成的对象,每一个类都只有一个类对象,该类对象被所有的实例对象所共享. 类之间有不同的方法,不同的属性.类对象,就是用于描述这种类,都有什么属性,什么方法的 ...

  9. C#中使用typeof关键字和GetType()获取类的内部结构(反射机制)

    一.问题描述 java有反射机制,C#也有反射机制,在C#中typeof关键字用于获取类型的System.Type对象,该对象的GetMethods()方法可以得到类型中定义的方法对象的计集合,调用方 ...

随机推荐

  1. C++ Primer注意事项11_运算符重载_算术/关系运算符_下标运算符

    1.算术/关系运算符 平时,定义成非成员函数以同意左右側运算对象进行转换.由于这些运算符一般不须要改变运算对象的状态,所以形參都是常量的引用. 以"+"号运算符为例: Person ...

  2. effective c++ 条款13 use object to manage resources.

    请求的系统资源需要最终还回系统,为了避免遗忘返还这个动作,可以利用析构函数在object销毁时自动调用的特点来实现. 简单说就是用object来管理资源. 以内存资源为例 class Investme ...

  3. 在WPF中处理Windows消息

    在Winform中 处理Windows消息通过重写WndProc方法 在WPF中 使用的是System.Windows. Sytem.Windows.Controls等名字空间,没有WndProc函数 ...

  4. 辛星和你解读PHP递归

    事实上递归成其他的编程语言可以是初学者练习功能,但由于PHP特殊性,我们把它拿出来具体解释什么.关于什么是递归先说说.我是第一个承认正在寻求一些递归阶乘,例如,我们写一个函数,然后问多少的阶乘. 看以 ...

  5. Android菜鸟的成长笔记(17)—— 再看Android中的Unbounded Service

    原文:Android菜鸟的成长笔记(17)-- 再看Android中的Unbounded Service 前面已经写过关于startService(Unbounded Service)的一篇文章:&l ...

  6. freemarker错误七

    1.错误叙述性说明 五月 30, 2014 11:33:57 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Template p ...

  7. ubuntu下一个jboss-seam-2.2.2.Final/examples/build.xml:754: warning: &#39;includeantruntime&#39; was not set

    [javac] /home/huihui/app/jboss-seam-2.2.2.Final/examples/build.xml:754: warning: 'includeantruntime' ...

  8. 并发编程实践三:Condition

    Condition实例始终被绑定到一个锁(Lock)上.Lock替代了Java的synchronized方法,而Condition则替代了Object的监视器方法,包含wait.notify和noti ...

  9. CSA 第五届研讨会 想象

    参加第五届CSA云安全联盟研讨会. 人们太.所以,我们没有找到座位.立一个很长的时间.为了弥补没有时间坐在办公室.一个补回来.首先为大家介绍的信贷云,事实上独立: 信-使用-云 1. 信-使用-云 什 ...

  10. GLEW_ERROR_NO_GL_VERSION的解决方法

    关于 GLenum err = glewInit(); if (GLEW_OK != err) fprintf(stderr, "error initializaing GLew %s\n& ...