Java-Bean-遍历和使用注解给Bean的属性添加属性值
目录
Java Bean 遍历和使用注解给Bean的属性添加属性值
- Java Bean 的遍历,利用Java的反射原理。Bean的属性添加属性值,使用Java的自定义注解。
- 例子:
- 创建注解类:
import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE }) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface SetFieldAttribute { String fieldName() default ""; String fieldType() default ""; }
- 创建 Java Bean:
import java.util.List; public class UserBean { private static final long i = 1l; @SetFieldAttribute(fieldName="userId") private String id; @SetFieldAttribute(fieldName="userName") private String name; @SetFieldAttribute(fieldName="userAge") private String age; @SetFieldAttribute(fieldName="userEmail") private String email; @SetFieldAttribute(fieldName="userFavourite", fieldType="list") private List<String> favourite; /** * @return the id */ @SetFieldAttribute(fieldName="userGetId") public String getId() { return id; } /** * @param id the id to set */ public void setId(String id) { this.id = id; } /** * @return the name */ @SetFieldAttribute(fieldName="userGetName") public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @return the age */ @SetFieldAttribute(fieldName="userGetAge") public String getAge() { return age; } /** * @param age the age to set */ public void setAge(String age) { this.age = age; } /** * @return the email */ @SetFieldAttribute(fieldName="userGetEmail") public String getEmail() { return email; } /** * @param email the email to set */ public void setEmail(String email) { this.email = email; } /** * @return the favourite */ @SetFieldAttribute(fieldName="userGetFavourite", fieldType="list") public List<String> getFavourite() { return favourite; } /** * @param favourite the favourite to set */ public void setFavourite(List<String> favourite) { this.favourite = favourite; } }
- 遍历 Bean:
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); } } } } } }
- 执行结果:
mod = private static final mod = private 注解的属性 fieldName = userId 注解的属性 fieldType = User Bean 属性的 Get 方法名 getMethod = getId User Bean 属性的值 id = 123 mod = private 注解的属性 fieldName = userName 注解的属性 fieldType = User Bean 属性的 Get 方法名 getMethod = getName User Bean 属性的值 name = Jack mod = private 注解的属性 fieldName = userAge 注解的属性 fieldType = User Bean 属性的 Get 方法名 getMethod = getAge User Bean 属性的值 age = 35 mod = private 注解的属性 fieldName = userEmail 注解的属性 fieldType = User Bean 属性的 Get 方法名 getMethod = getEmail User Bean 属性的值 email = jack@127.com mod = private 注解的属性 fieldName = userFavourite 注解的属性 fieldType = list User Bean 属性的 Get 方法名 getMethod = getFavourite User Bean 属性的值 favourite : 1 = 跑步 User Bean 属性的值 favourite : 2 = 游泳 User Bean 属性的值 favourite : 3 = 篮球 User Bean 属性的值 favourite : 4 = 旅游 --- 注解的属性 fieldName = userGetAge 注解的属性 fieldType = mod = public User Bean 属性的 Get 方法名 getMethod = getAge User Bean 属性的值 getAge = 35 注解的属性 fieldName = userGetEmail 注解的属性 fieldType = mod = public User Bean 属性的 Get 方法名 getMethod = getEmail User Bean 属性的值 getEmail = jack@127.com 注解的属性 fieldName = userGetFavourite 注解的属性 fieldType = list mod = public User Bean 属性的 Get 方法名 getMethod = getFavourite User Bean 属性的值 getFavourite : 1 = 跑步 User Bean 属性的值 getFavourite : 2 = 游泳 User Bean 属性的值 getFavourite : 3 = 篮球 User Bean 属性的值 getFavourite : 4 = 旅游 注解的属性 fieldName = userGetName 注解的属性 fieldType = mod = public User Bean 属性的 Get 方法名 getMethod = getName User Bean 属性的值 getName = Jack 注解的属性 fieldName = userGetId 注解的属性 fieldType = mod = public User Bean 属性的 Get 方法名 getMethod = getId User Bean 属性的值 getId = 123
- 创建注解类: