呼び出し元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();



        }