import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
public class MainTest {
private static UserBean userBean;
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
setUserBean();
traversalBean();
}
// 创建User Bean对象,并设值
private static void setUserBean() {
userBean = new UserBean();
userBean.setId("123");
userBean.setName("Jack");
userBean.setAge("35");
userBean.setEmail("jack@127.com");
List<String> favouriteList = new ArrayList<String>();
favouriteList.add("跑步");
favouriteList.add("游泳");
favouriteList.add("篮球");
favouriteList.add("旅游");
userBean.setFavourite(favouriteList);
}
// 遍历 Bean
private static void traversalBean() throws Exception{
// 通过Bean的属性遍历
Field[] fields = userBean.getClass().getDeclaredFields();
for (Field field : fields) {
String mod = Modifier.toString(field.getModifiers());
System.out.println("mod = " + mod);
// 跳过静态属性
if (mod.indexOf("static") != -1) {
continue;
}
// 取得注解的设置的属性值
SetFieldAttribute setField = field.getAnnotation(SetFieldAttribute.class);
if (setField != null) {
String fieldName = setField.fieldName();
String fieldType = setField.fieldType();
System.out.println("注解的属性 fieldName = " + fieldName);
System.out.println("注解的属性 fieldType = " + fieldType);
String getMethod = "get" + field.getName().substring(0, 1).toUpperCase()
+ field.getName().substring(1);
System.out.println("User Bean 属性的Get方法名 getMethod = " + getMethod);
Class[] methodParam = null;
Object[] params = {};
Object retVal = userBean.getClass().getMethod(getMethod, methodParam).invoke(userBean, params);
if (fieldType.equals("list")) {
List<String> favouriteList = (List<String>) retVal;
int i = 1;
for (String favourite : favouriteList) {
System.out.println("User Bean 属性的值 " + field.getName() + " : " + i + " = " + favourite);
i++;
}
} else {
// 取得Bean属性的值
System.out.println("User Bean 属性的值 " + field.getName() + " = " + retVal);
}
}
}
System.out.println("******************************************************************");
// 通过Bean的方法遍历
Method[] methods = userBean.getClass().getDeclaredMethods();
for (Method method : methods) {
// 取得注解的设置的属性值
SetFieldAttribute setField = method.getAnnotation(SetFieldAttribute.class);
if (setField != null) {
String fieldName = setField.fieldName();
String fieldType = setField.fieldType();
System.out.println("注解的属性 fieldName = " + fieldName);
System.out.println("注解的属性 fieldType = " + fieldType);
Class[] methodParam = null;
Object[] params = {};
Object retVal = null;
if (method.getName().substring(0,3).equals("get")) {
String mod = Modifier.toString(method.getModifiers());
System.out.println("mod = " + mod);
System.out.println("User Bean 属性的Get方法名 getMethod = " + method.getName());
retVal = userBean.getClass().getMethod(method.getName(), methodParam).invoke(userBean, params);
if (fieldType.equals("list")) {
List<String> favouriteList = (List<String>) retVal;
int i = 1;
for (String favourite : favouriteList) {
System.out.println("User Bean 属性的值 " + method.getName() + " : " + i + " = " + favourite);
i++;
}
} else {
// 取得Bean属性的值
System.out.println("User Bean 属性的值 " + method.getName() + " = " + retVal);
}
}
}
}
}
}