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
        
         

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值