内省----->一个变态的反射
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; } }
时间: 2024-10-12 11:27:36