调用者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(); }