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); } }
相关文章推荐
- java 通过反射机制得到类的属性和方法
- java中的反射机制,以及如何通过反射获取一个类的构造方法 ,成员变量,方法,详细。。
- Java中通过注解+反射拿到对象的属性和方法
- Java通过反射机制动态设置对象属性值的方法
- Java中用反射的方式获取类中的所有属性和方法,以及获取属性的默认值,设置属性的默认值
- 简单的JAVABEAN属性复制方法!
- javaBean类,以及Sun的java内省机制与apache的BeanUtils框架/工具简单应用
- flex 中通过 RO 调用一个java写的Bean的时候获得IP地址的方法 .也就是获得session 和 request的方法
- BeanUtils和Cglib的Java Bean属性copy功能的性能比较
- Jakarta Commons BeanUtils 拷贝bean属性
- Java的动态性支持学习三 - 反射机制 取消属性、方法、构造器的访问限制
- 有关java通过反射机制调用类中自有方法的问题
- 设计模式之1.1 再谈反射 以及java当中通过配置文件得到类名字,并生成对象的方法
- (JAVA)大话类、方法、参数、对象、属性以及面向对象的开发模式(欢迎高手泼墨)
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- Java 编程下通过反射获取一个类中的方法名和对应参数名
- 利用java的反射机制调用类的私有方法及私有属性
- Spring通过set方法注入Bean属性
- oracle pl/sql应用解析以及存储过程对应到java中的调用方法
- 通过JAVA的Serialization机制进行对象的拷贝