java内省技术_Java 内省introspector Java 内省introspector相关原理代码解析

想了解Java 内省introspector相关原理代码解析的相关内容吗,htj10在本文为您仔细讲解Java 内省introspector的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点: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 Exception

*/

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());

}

}

相关文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值