Flask接口签名sign原理与实例代码浅析
294
2022-11-29
Java 内省introspector相关原理代码解析
1. javaBean (有get/set属性,和默认构造器等规范的java类)
import java.util.Date;
public class Student {
// 这是 字段
private String name;
private int age;
private Date birthday;
// 这是 属性
//(get、set开头的方法,getName、setName算一个属性,单独一个set或get也算一个属性)
// 属性名为 去掉get、set后 第一个大写字母变小写字母。
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;
}
public int getAbc(){ //注意这也是一个属性,属性名为 abc
return 10;
}
/*
public int getefg(){ //注意这也是一个属性,属性名为 efg
return 10;
}*/
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
测试
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;
public class Test1 {
public static void main(String[] args) throws Exception {
test05();
}
// 获取属性描述器 Introspector.getBeanInfo(Student.class).getPropertyDescriptors();
private static void test01() throws Exception {
BeanInfo bf = Introspector.getBeanInfo(Student.class);
PropertyDescriptor[] pds = bf.getPropertyDescriptors();
for (PropertyDescriptor pd : pds) {
System.out.println(pd.getName());
}
/*
abc
age
class //这个是Object类里的
name
*/
}
// 使用内省 调用set、get方法
private static void test02() throws Exception {
Student stu = new Student();
PropertyDescriptor pd = new PropertyDescriptor("name", Student.class);
Method setter = pd.getWriteMethod();
setter.invoke(stu, "tom");
Method getter = pd.getReadMethod();
System.out.println(getter.invoke(stu));
}
/**
* 以上使用的 java源码里的 java.beans包
* 接下来有更方便的,Apache 组织提供的 commons-beanutils-1.8.3.jar
* 导入:commons-beanutils-1.8.3.jar commons-logging-1.1.1.jar
*/
private static void test03() throws Exception{
Student stu = new Student();
BeanUtils.setProperty(stu, "name", "白居易");
System.out.println(stu.getName());
String name = BeanUtils.getProperty(stu, "name");
System.out.println(name);
//BeanUtils 支持8中基本类型 自动转换
BeanUtils.setProperty(stu, "age", 19);
BeanUtils.setProperty(stu, "age", "18");
System.out.println(stu.getAge());
//PropertyUtils.setSimpleProperty(stu, name, value);
}
private static void test04() throws Exception{
Student stu = new Student();
//set/get 日期 Date
ConvertUtils.register(new DateLocaleConverter(), Date.class);
BeanUtils.setProperty(stu, "birthday", "1999-11-10");
System.out.println(stu.getBirthday());
String s = BeanUtils.getProperty(stu, "birthday");
System.out.println(s);
}
/**
* 一下整个赋值给 javaBean 对象,使用 BeanUtils.populate
* @throws ExcepwvoKction
*/
private static void test05() throws Exception{
Student stu = new Student();
Map m = new HashMap();
m.put("name", "Lee");//注意:key名一定要与对象中的变量名一致
m.put("age", "18");//注意:key名一定要与对象中的变量名一致
m.put("birthday", "2020-7-4");//注意:key名一定要与对象中的变量名一致
ConvertUtils.register(new DateLocaleConverter(), Date.class);
BeanUtils.populate(stu, m);
System.out.println(stu.getBirthday());
}
}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~