您的位置:首页 > 编程语言 > Java开发

JavaBean中通过自省机制拿到对应的属性和方法,以及BeanUtils工具类中的拷贝属性方法

2017-07-04 16:51 417 查看

JavaBean

JavaBean的规范:JavaBean是一个特殊的java类:它的类必须是公共的,必须提供一个公共的无参的构造函数。
JavaBean的属性是以方法的形式出现(setter、getter)
User类:
package cn.itsource._01_javabean;

/**
*  JavaBean:类必需是公共的,必需提供一个公共的无参构造函数
* */
public class User {
/**
*  id表示编号
* */
private long id;

private int age;
/**
*  name:表示用户名
* */
private String name;

/**
*  sex表示性别
* */
private boolean sex;

//boolean类型的时候使用 isSex做可读属性,不适用getSex
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", age=" + age + ", name=" + name + ", sex=" + sex + "]";
}

}


Teacher类:
package cn.itsource._01_javabean;

/**
*  JavaBean:类必需是公共的,必需提供一个公共的无参构造函数
* */
public class Teacher {
/**
*  id表示编号
* */
private long id;

private int age;
/**
*  name:表示用户名
* */
private String name;

/**
*  sex表示性别
* */
private boolean sex;

//boolean类型的时候使用 isSex做可读属性,不适用getSex
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Teacher [ age=" + age + ", name=" + name + ", sex=" + sex + "]";
}

}


测试JavaBean的类:
package cn.itsource._01_javabean;

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.beanutils.BeanUtils;
import org.junit.Test;

/**
*  JavaBean的自省机制测试
* */
public class BeanTest {

@Test
public void testBean() throws IntrospectionException {
//拿到User对应的BeanInfo
//ntrospector:拿到JavaBean的工具类
/**
*  拿到一个类对应的BeanInfo对象
*  	Introspector.getBeanInfo(Class clz);
*  拿到这个对象就可以通过BeanInfo对这个类进行自省(拿到它对应的属性、方法)
* */
//static BeanInfo getBeanInfo(Class<?> beanClass, Class<?> stopClass)
// 在给定的“断”点之下,在 Java Bean 上进行内省,第二个参数表示到哪一个class就停止(不包含class)
BeanInfo userBean = Introspector.getBeanInfo(User.class,Object.class);//拿到beaninfo

//拿到相应的属性描述器
PropertyDescriptor[] pds = userBean.getPropertyDescriptors();
//遍历拿到所有属性
for (PropertyDescriptor pd : pds) {
//pd.getName()拿到属性名称 。还会拿到父类的属性class
System.out.println(pd.getName());

System.out.println(pd.getReadMethod());//拿到可读方法
System.out.println(pd.getWriteMethod());//拿到可写的方法
}

}
/**
*  测试BeanUtils工具类中的拷贝属性方法
* */
@Test
public void testCopyProp() throws Exception {
User user = new User();
user.setId(3L);
user.setName("貂蝉");
user.setAge(24);
user.setSex(false);
System.out.println(user);

//相同类中的属性copy
User user2 = new User();
//把user的属性拷贝给user2
BeanUtils.copyProperties(user2, user);
System.out.println(user2);

//不同类中的属性copy
Teacher teacher = new Teacher();
//把user的属性拷贝给teacher
BeanUtils.copyProperties(teacher, user);
System.out.println(teacher);

//将map中的属性copy到对象中
Map<String,Object> map = new HashMap<String,Object>();
map.put("name", "刘备");
map.put("age", 35);
User user3 = new User();
BeanUtils.copyProperties(user3, map);
System.out.println(user3);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐