呼び出し元Classとmethodの取得、getメソッドの反射取得、注釈情報の取得
8277 ワード
呼び出し者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();
}