首页 > 代码库 > java框架BeanUtils练习

java框架BeanUtils练习

内省----->一个变态的反射
   BeanUtils主要解决 的问题: 把对象的属性数据封装 到对象中。  使从文件中读取的数据往对象中赋值更加简单;
 
  BeanUtils的好处:
  1. BeanUtils设置属性值的时候,如果属性是基本数据 类型,BeanUtils会自动帮我转换数据类型。
   2. BeanUtils设置属性值的时候底层也是依赖于get或者Set方法设置以及获取属性值的。
   3. BeanUtils设置属性值,如果设置的属性是其他的引用 类型数据,那么这时候必须要注册一个类型转换器。

代码练习:

Emp类:

 

package com.java.base;

import java.sql.Date;

public class Emp {
    
    private int id;
    
    private String name;
    
    private double salary;
    
    private Date birthday;
    
    public Date getBirthday() {
        return birthday;
    }



    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }



    public Emp(int id, String name, double salary) {
        super();
        this.id = id;
        this.name = name;
        this.salary = salary;
    }

    

    public int getId() {
        return id;
    }



    public void setId(int id) {
        this.id = id;
    }



    public String getName() {
        return name;
    }



    public void setName(String name) {
        this.name = name;
    }



    public double getSalary() {
        return salary;
    }



    public void setSalary(double salary) {
        this.salary = salary;
    }



    public Emp(){}
    
    @Override
    public String toString() {
        return "编号: " + this.id + "姓名: " + this.name + "薪水: " + this.salary + "出生日期: " + this.birthday;
    }
    

}

 

BeanUtils代码:

package com.java.fram;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Constructor;

import com.java.base.Emp;
import com.java.base.Person;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;

/*
    内省----->一个变态的反射
      BeanUtils主要解决 的问题: 把对象的属性数据封装 到对象中。
 
     BeanUtils的好处:
     1. BeanUtils设置属性值的时候,如果属性是基本数据 类型,BeanUtils会自动帮我转换数据类型。
      2. BeanUtils设置属性值的时候底层也是依赖于get或者Set方法设置以及获取属性值的。
      3. BeanUtils设置属性值,如果设置的属性是其他的引用 类型数据,那么这时候必须要注册一个类型转换器。
      
 */


public class BeanUtilsExercise {

     public static void main(String[] args) throws Exception {
//         writeFile();
//         Person p = (Person)getInstance();
//         System.out.println(p);
         String id = "001";
         String name = "张三";
         String salary = "1000";
         String birthday = "2013-12-10";
         
         //注册一个类型转换器
         ConvertUtils.register(new Converter() {
            
            @Override
            public Object convert(Class type, Object value) {
                Date date = null;
                try{
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
                date = (Date) dateFormat.parse((String)value);
                }catch(Exception e){
                    e.printStackTrace();
                }
                return date;
            }
        }, Date.class);
         
         Emp e = new Emp();
         BeanUtils.setProperty(e, "id", id);
         BeanUtils.setProperty(e, "name", name);
         BeanUtils.setProperty(e, "salary", salary);
         BeanUtils.setProperty(e, "birthday", birthday);
         
         System.out.println(e);
    }
     
     public static void writeFile() throws Exception{
         BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("obj.txt"));
         bufferedWriter.write("com.java.base.Person");
         bufferedWriter.newLine();
         bufferedWriter.write("id=1");
         bufferedWriter.newLine();
         bufferedWriter.write("name=王五");
         bufferedWriter.newLine();
         bufferedWriter.write("age=25");
         bufferedWriter.newLine();
         bufferedWriter.close();
         
     }
     public static Object getInstance() throws Exception{
         writeFile();
         BufferedReader bufferedReader = new BufferedReader(new FileReader("obj.txt"));
         String className = bufferedReader.readLine();
         Class clazz = Class.forName(className);
         Constructor constructor = clazz.getConstructor(null);//获取构造方法;
         Object person = constructor.newInstance(null);
         //通过构造方法获取一个实例
         String line = null;
         while((line = bufferedReader.readLine()) != null){
             String[] datas = line.split("=");
             Field field = clazz.getDeclaredField(datas[0]);
             if(field.getType() == int.class){
                 field.set(person, Integer.parseInt(datas[1]));
             }
             else{
                 field.set(person, datas[1]);
             }
         }
         return person;
         
     }

}

 

java框架BeanUtils练习