JavaBean
2021-05-19 12:28
标签:util 没有 数据封装 color map utils jar use 工具 1,JavaBean是一种规范,也是对类的要求。 它要求Java类的成员变量提供getting和setting的方法,这样的成员变量我们称之为JavaBean属性。 比如: 2,JavaBean属性 JavaBean属性是具有getter/setter方法的成员变量。 也可以只提供getter方法,这样的属性叫只读属性; 也可以只提供setter方法,这样的属性叫只写属性; 如果属性类型为boolean类型,那么读方法的格式可以是get或is。 例如名为abc的boolean类型的属性,它的读方法可以是getAbc(),也可以是isAbc(); JavaBean属性名要求:前两个字母要么都大写,要么都小写: 3,内省 1)内省的目标是得到JavaBean属性的读、写方法的反射对象,通过反射对JavaBean属性进行操作的一组API。例如User类有名为username的JavaBean属性,通过两个Method对象(一个是getUsenrmae(),一个是setUsername())来操作User对象。 如果你还不能理解内省是什么,那么我们通过一个问题来了解内省的作用。现在我们有一个Map,内容如下 现在需要把map的数据封装到一个User对象中!User类有两个JavaBean属性,一个叫username,另一个叫password。你可能想到的是反射,通过map的key来查找User类的Field!这么做是没有问题的,但我们要知道类的成员变量是私有的,虽然也可以通过反射去访问类的私有的成员变量,但我们也要清楚反射访问私有的东西是有“危险”的,所以还是建议通过getUsername和setUsername来访问JavaBean属性。 BeanInfo beanInfo = Introspector.getBeanInfo(User.class); PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors(); User user = new User(); for(PropertyDescriptor pd : pds) { String name = pd.getName(); String value = map.get(name); if(value != null) { Method writeMethod = pd.getWriteMethod(); writeMethod.invoke(user, value); } } System.out.println(user); 2)获取BeanInfo:通过Java.beans.introspector的getInfo()方法获取Java.beans.BeanInfo实例,比如 BeanInfo beaninfo=Introspector.getBeanInfo(User.class); 通过BeanInfo可以得到这个类的所有JavaBean属性的PropertyDescriptor对象, 获取属性描述符:PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();每一个PropertyDescription对象对应 一个JavaBean属性,然后就可以通过PropertyDescription对象来获取这个属性的setting/getting方法了 String getName()获取JavaBean属性名称 Method getWriterMethod() 获取写方法 Method getReadMethod() 获取读方法 参考上面的代码 3)提到内省,不能不提commons-beanutils这个工具。它底层使用了内省,对内省进行了大量的简化!使用beanutils需要的jar包: commons-beanutils.jar 和 commons-logging.jar; 可以直接设置 username 和 password 的属性值 admin 和 admin123 也可以获取属性值 还可以封装Map数据到JavaBean对象中 JavaBean 标签:util 没有 数据封装 color map utils jar use 工具 原文地址:https://www.cnblogs.com/QianYue111/p/9739819.htmlpublic class User {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
public class User {
private String username;
private String password;
public User(String username, String password) {
this.username = username;
this.password = password;
}
public User() {
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String toString() {
return "User [username=" + username + ", password=" + password + "]";
}
}
Map
User user = new User();
BeanUtils.setProperty(user, "username", "admin");
BeanUtils.setProperty(user, "password", "admin123");
User user = new User("admin", "admin123");
String username = BeanUtils.getProperty(user, "username");
String password = BeanUtils.getProperty(user, "password");
System.out.println("username=" + username + ", password=" + password);
Map
上一篇:js new Array创建数组
下一篇:优秀c++开源项目集合