获取调用者Class和method、反射获取get方法、获取注解信息
调用者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方法、获取注解信息的更多相关文章
- C# 知识点笔记:IEnumerable<>的使用,利用反射动态调用方法
IEnumerable<T>的使用 创建一个IEnumerable对象 List<string> fruits = new List<string> { " ...
- java进阶之反射:反射基础之如何获取一个类以及如何获取这个类的所有属性和方法(2)
当我们知道一个类的对象,或者知道一个类的路径,或者指导这个类的名称的时候我们可以获取到这个类的类对象 当我们仅仅知道一个类的类对象的时候我们依然无法操作这个类,因为我们不知道这个类的属性,类的方法.那 ...
- Java反射机制(获取Class对象的三种方式+获取Class中的构造函数进行对象的初始化+获取反射类的字段+获取反射类的一般方法)
反射技术其实就是动态加载一个指定的类,并获取该类中的所有内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员,简单来说:反射技术可以对一个类进行解剖,反射大大增强 ...
- java反射之获取所有方法及其注解(包括实现的接口上的注解),获取各种标识符备忘
java反射之获取类或接口上的所有方法及其注解(包括实现的接口上的注解) /** * 获取类或接口上的所有方法及方法上的注解(包括方法实现上的注解以及接口上的注解),最完整的工具类,没有现成的工具类 ...
- 反射工具类.提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,被AOP过的真实类等工具函数.java
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Validate; import org.ap ...
- XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)
XML序列化 #region 序列化 /// <summary> /// XML序列化 /// </summary> /// <param name="ob ...
- 【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】
方法1:通过get()方法获取属性值 package com.sxd.test.controller; public class FirstCa{ private Integer num; priva ...
- 反射与类对象获取-Java学习
类对象 类对象指的是一个类在jvm中加载后所形成的对象,每一个类都只有一个类对象,该类对象被所有的实例对象所共享. 类之间有不同的方法,不同的属性.类对象,就是用于描述这种类,都有什么属性,什么方法的 ...
- C#中使用typeof关键字和GetType()获取类的内部结构(反射机制)
一.问题描述 java有反射机制,C#也有反射机制,在C#中typeof关键字用于获取类型的System.Type对象,该对象的GetMethods()方法可以得到类型中定义的方法对象的计集合,调用方 ...
随机推荐
- Git打补丁常见问题
Git打补丁常见问题 往往觉得得到某个功能的补丁就觉得这个功能我就已经成功拥有了,可是在最后一步的打补丁的工作也是须要相当慎重的,甚至有可能还要比你获取这个补丁花费的时间还要多.看到好多同行遇到这个问 ...
- cnBlog 的windows live writer 客户端配置
重装系统后总是忘,备个档 CNBLOG 博客名 cnblog 日志帐户 http://www.cnblogs.com/liulaocai2/ 用户:359444066 密码:同QQ密码,比QQ少一位 ...
- 自定义DB连接池实现
实现一个简单的数据库连接池 1,连接池接口 package dbsource; import java.sql.Connection; import java.sql.SQLException; /* ...
- (转)linux service理解
能够使用service命令进行操作的,就是已经注册成为linux的系统服务了.window中也可以注册成为系统服务的办法. service命令用的次数真不少,就是比较多的关联点,用了很多次了,还是有些 ...
- Palindromes _easy version
Time Limit: 1Sec MemoryLimit: 64 MB Submit:165 Solved: 76 [Submit][Status][WebBoard] Description & ...
- [生产环境数据恢复]innobackupex: fatal error: OR no 'datadir' option in group 'mysqld' in MySQL options
1 运行恢复命令 [xxx@xxx-c001db1 tmp]$ time /usr/bin/innobackupex --rsync --user="user" --passwo ...
- MINA2 源代码学习--源代码结构梳理
一.mina总体框架与案例: 1.总体结构图: 简述:以上是一张来自网上比較经典的图,总体上揭示了mina的结构,当中IoService包括clientIoConnector和服务端IoAccepto ...
- LeetCode219:Contains Duplicate II
Given an array of integers and an integer k, find out whether there there are two distinct indices i ...
- 网络视频播放器插件ckplayer使用-简介
ckplayer插件下载:http://pan.baidu.com/s/12HYH4(假设不见了,下载您自己的地址,下载后添加到站点根文件夹) ******特别提醒:解压后不要忘了把js文件夹也加入到 ...
- Servlet上传文件
Servlet上传文件 1.准备工作 (1)利用FileUpload组件上传文件,须要到apache上下载commons-fileupload-1.3.1.jar 下载地址:http://common ...