调用者Class 及 method

  1. StackTraceElement stacks[] = Thread.currentThread().getStackTrace();
  2. for (StackTraceElement stack : stacks) {
  3. String className = stack.getClassName();
  4. if (className.contains("com.upsoft")
  5. && className.contains("Controller")) {
  6. className = className.substring(className.lastIndexOf(".") + 1,
  7. className.length());
  8. String methodName = stack.getMethodName();
  9. }
  10. }

反射(get)

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

反射(set)

  1. public static void invokeSet(Object o, String fieldName, Object value) {
  2.  
  3. Method method = getSetMethod(o.getClass(), fieldName);
  4.  
  5. try {
  6.  
  7. method.invoke(o, new Object[] { value });
  8.  
  9. } catch (Exception e) {
  10.  
  11. e.printStackTrace();
  12.  
  13. }
  14.  
  15. }
  16.  
  17. public static Method getSetMethod(Class objectClass, String fieldName) {
  18.  
  19. try {
  20.  
  21. Class[] parameterTypes = new Class[1];
  22.  
  23. Field field = objectClass.getDeclaredField(fieldName);
  24.  
  25. parameterTypes[0] = field.getType();
  26.  
  27. StringBuffer sb = new StringBuffer();
  28.  
  29. sb.append("set");
  30.  
  31. sb.append(fieldName.substring(0, 1).toUpperCase());
  32.  
  33. sb.append(fieldName.substring(1));
  34.  
  35. Method method = objectClass.getMethod(sb.toString(), parameterTypes);
  36.  
  37. return method;
  38.  
  39. } catch (Exception e) {
  40.  
  41. e.printStackTrace();
  42.  
  43. }
  44.  
  45. return null;
  46.  
  47. }

获取类注解信息

  1. Annotation[] annotations = entity.getClass().getAnnotations();
  2. for (int i = 0; i < annotations.length; i++) {
  3. String annoStr = annotations[i].toString();
  4. if (annoStr.contains("@javax.persistence.Table")) {
  5. annoStr = annoStr.substring(annoStr.lastIndexOf("name=") + 5);
  6. while (annoStr.contains(",")) {
  7. annoStr = annoStr.substring(0, annoStr.lastIndexOf(","));
  8. }
  9. tableName = annoStr;
  10. }
  11. }

获取方法、属性注解

  1. Field[] fields = entity.getClass().getDeclaredFields();
  2.  
  3. // 遍历Bean属性
  4. for (int i = 0; i < fields.length; i++) {
  5. Field field = fields[i];
  6. String attrName = field.getName();
  7. // 获取属性对应的get方法
  8. Method method = getGetMethod(entity.getClass(), attrName);
  9.  
  10. Annotation[] attrAnnotations = field.getAnnotations();
  11. Annotation[] methodAnnotations = method.getAnnotations();
  12.  
  13. }

获取调用者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. Git打补丁常见问题

    Git打补丁常见问题 往往觉得得到某个功能的补丁就觉得这个功能我就已经成功拥有了,可是在最后一步的打补丁的工作也是须要相当慎重的,甚至有可能还要比你获取这个补丁花费的时间还要多.看到好多同行遇到这个问 ...

  2. cnBlog 的windows live writer 客户端配置

    重装系统后总是忘,备个档 CNBLOG 博客名 cnblog 日志帐户 http://www.cnblogs.com/liulaocai2/ 用户:359444066 密码:同QQ密码,比QQ少一位 ...

  3. 自定义DB连接池实现

    实现一个简单的数据库连接池 1,连接池接口 package dbsource; import java.sql.Connection; import java.sql.SQLException; /* ...

  4. (转)linux service理解

    能够使用service命令进行操作的,就是已经注册成为linux的系统服务了.window中也可以注册成为系统服务的办法. service命令用的次数真不少,就是比较多的关联点,用了很多次了,还是有些 ...

  5. Palindromes&nbsp;_easy&nbsp;version

    Time Limit: 1Sec  MemoryLimit: 64 MB Submit:165  Solved: 76 [Submit][Status][WebBoard] Description & ...

  6. [生产环境数据恢复]innobackupex: fatal error: OR no &#39;datadir&#39; option in group &#39;mysqld&#39; in MySQL options

    1 运行恢复命令  [xxx@xxx-c001db1 tmp]$ time /usr/bin/innobackupex --rsync --user="user" --passwo ...

  7. MINA2 源代码学习--源代码结构梳理

    一.mina总体框架与案例: 1.总体结构图: 简述:以上是一张来自网上比較经典的图,总体上揭示了mina的结构,当中IoService包括clientIoConnector和服务端IoAccepto ...

  8. LeetCode219:Contains Duplicate II

    Given an array of integers and an integer k, find out whether there there are two distinct indices i ...

  9. 网络视频播放器插件ckplayer使用-简介

    ckplayer插件下载:http://pan.baidu.com/s/12HYH4(假设不见了,下载您自己的地址,下载后添加到站点根文件夹) ******特别提醒:解压后不要忘了把js文件夹也加入到 ...

  10. Servlet上传文件

    Servlet上传文件 1.准备工作 (1)利用FileUpload组件上传文件,须要到apache上下载commons-fileupload-1.3.1.jar 下载地址:http://common ...