目录

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