javabean
package entity;
import java.util.Date;
/**
* 一个测试用:
* student,javaBean
* @author mzy
* 一个标准的javaBean:
* 1) 属性只要是private修饰的;
* 2) 提供setter和getter方法;
* 3) 提供无参构造。
* 就行了;有参构造等不是必须的。
*/
public class Student {
private int id;
private String name;
private double score;
private boolean gender;
private Date birth;
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 getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public boolean isGender() {
return gender;
}
public void setGender(boolean gender) {
this.gender = gender;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", score=" + score + ", gender=" + gender + ", birth=" + birth
+ "]";
}
}
package beanutil;
import java.lang.reflect.InvocationTargetException;
import java.text.ParseException;
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;
import entity.Student;
/**
* BeanUtils:
* 内部的自动类型转换。
* 字符串->Date类型,注册转化器;
* 自定义时间格式,自定义转化器;
*
* @author mzy
*
*/
public class Demo02 {
public static void main(String[] args) {
Student s2 = new Student();
/**
* 注册转换器
*/
// 默认的转化器;
// ConvertUtils.register(new DateLocaleConverter(), java.util.Date.class);
// 自定义一个字符串 -> 日期转化器
ConvertUtils.register(new MyDateConvert(), java.util.Date.class);
try {
/*
* bean中可以传入的全是字符串,它内部会自动进行类型转换!
* String -> int
* String -> boolean
* String -> double
* 等都是ok的; 这些都是内置的转化器;
*
* 但是内置转换器,默认情况下不支持:字符串->日期,转换!
* 如果想要进行字符串日期转换的话,要手动注册一个转化器。
*/
BeanUtils.copyProperty(s2, "id", "2");
BeanUtils.copyProperty(s2, "name", "jacky");
BeanUtils.copyProperty(s2, "gender", "true");
BeanUtils.copyProperty(s2, "scroe", "90.23");
// BeanUtils内置的转化器,只支持使用: YYYY-MM-dd的格式,而且后面不能有具体的时间: 16:11:30
// BeanUtils.copyProperty(s2, "birth","2015-06-24");
BeanUtils.copyProperty(s2, "birth","2015/06/24 16:11:30"); //String->Date(默认情况,不支持直接从String转为Date)
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} // 不需要依赖Student对象
System.out.println(s2);
}
}
/**
* 自定义日期转换器,实现转换器的接口
* @author mzy
*
*/
class MyDateConvert implements Converter{
/**
* target(src): 转换为 什么类型
* value: 需要转换的值
* 该方法返回的转换后的值
*/
@Override
public Object convert(Class target, Object value) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
//如果需要转换成Date类型,则进行转换
if(target==Date.class){
String date = (String)value;
//把string按照某种转换Date
Date curDate = sdf.parse(date);
return curDate;
}
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}