Java 内省introspector相关原理代码解析

网友投稿 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小时内删除侵权内容。

上一篇:IDEA初次配置并导入gite码云的方法
下一篇:Java instanceof和getClass()区别实例解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~