内省(Introspector) 是Java 语言对 JavaBean 类属性、事件的一种缺省处理方法

目的:主要用于传递数据信息,这种类中的方法主要用于访问私有的字段(且方法名符合某种命名规则)

package day02.introspector;

public class Person {
public String name;
public int age;
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 String getHigh() {
return high;
}
public void setHigh(String high) {
this.high = high;
}
public String high;
public int getAb() {
return age;
}
}

//使用内省操作bean的属性

package day02.introspector;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import org.junit.Test;
//使用内省操作bean的属性
public class Demo1 {
//得到bean的所有属性
@Test
public void Test() throws IntrospectionException{
BeanInfo info= Introspector.getBeanInfo(Person.class,Object.class);//拿到bean自己的属性
PropertyDescriptor[] psd=info.getPropertyDescriptors();//得到属性描述器
for(PropertyDescriptor pd:psd){
System.out.println(pd.getName());
}
} //操作bean的属性:age
@Test
public void Test2() throws IntrospectionException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
Person p=new Person();
PropertyDescriptor pd=new PropertyDescriptor("age",Person.class);
//得到属性的写方法,为属性赋值
Method method=pd.getWriteMethod();
method.invoke(p,23);
//获得属性值
method=pd.getReadMethod();
System.out.println(method.invoke(p, null));
// System.out.println(p.getAge());
} }

以上代码可以运行后体验下

//高级点的操作:bean的操作属性类型
@Test
public void Test3 () throws IntrospectionException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
Person p=new Person();
PropertyDescriptor pd=new PropertyDescriptor("age",Person.class);
System.out.println(pd.getPropertyType());
}

get set数据

注册日期转换器

@Test
public void test2() throws IllegalAccessException, InvocationTargetException {
String name = "aaaa";
String high = "232";
String age = "34";
String birthday = "1995-12-10";
// String today="1996-12-10";
// ConvertUtils.register(new DateLocaleConverter(), Date.class);//方法之二:有bug,不要用!
Person p = new Person();
// 为了让日期赋到bean的birthday的属性上。我们给beanuntils注册一个日期转换器
ConvertUtils.register(new Converter() {
@Override
public Object convert(Class arg0, Object value) {
if (value == null) {
return null;
}
if (!(value instanceof String)) {
System.out.println("no");
throw new ConversionException("只转String");
}
String str = (String) value;
if (str.trim().equals("")) {
return null;
}
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
return df.parse(str);
} catch (ParseException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);// 异常链不能断
}
}
}, Date.class);
BeanUtils.setProperty(p, "name", name);
BeanUtils.setProperty(p, "high", high);// 只支持8种基本类型自动转型
BeanUtils.setProperty(p, "age", age);// 只支持8种基本类型自动转型
BeanUtils.setProperty(p, "birthday", birthday);//通过转化器成功 System.out.println(p.getName());
System.out.println(p.getHigh());
System.out.println(p.getAge());
System.out.println(p.getBirthday());
// Date date=p.getToday();
// System.out.println(date.toLocaleString());
}

用map

//用map来添数据
@Test
public void test5() throws IllegalAccessException, InvocationTargetException{
Map map=new HashMap();
map.put("name", "aaaa");
map.put("high", "123");
map.put("age", "23");
map.put("birthday", "1995-12-10");
ConvertUtils.register(new DateLocaleConverter(), Date.class);
Person p=new Person();
BeanUtils.populate(p, map);
System.out.println(p.getName());
System.out.println(p.getHigh());
System.out.println(p.getAge());
System.out.println(p.getBirthday());
}

内省(Introspector)的更多相关文章

  1. 内省(introspector)------>JavaBean

    内省(introspector)------>JavaBean    1.问什么要学内省?        开发框架时,经常需要Java对象的属性来来封装程序的数据,每次使用反射技术完成此操作过于 ...

  2. 深入理解Java:内省(Introspector)

    深入理解Java:内省(Introspector) 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传 ...

  3. Java:内省(Introspector)

    内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且 ...

  4. JavaBeans与内省(Introspector)

    JavaBean与Introspector 反射和内省操作很多时候都是在以后要做框架的时候作用非常大.    现在你学的是面向对象编程,即:你所写代码都能够找到对应的类或接口,找到具体的方法写出对应的 ...

  5. Java 内省(Introspector)深入理解

    Java 内省(Introspector)深入理解 一些概念: 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类 ...

  6. 【小家Spring】聊聊Spring中的数据绑定 --- BeanWrapper以及内省Introspector和PropertyDescriptor

    #### 每篇一句 > 千古以来要饭的没有要早饭的,知道为什么吗? #### 相关阅读 [[小家Spring]聊聊Spring中的数据转换:Converter.ConversionService ...

  7. Java 内省(Introspector)和 BeanUtils

    人生若只如初见,何事秋风悲画扇. 概述 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息, ...

  8. (转载)深入理解Java:内省(Introspector)

    本文转载自:https://www.cnblogs.com/peida/archive/2013/06/03/3090842.html 一些概念: 内省(Introspector) 是Java 语言对 ...

  9. 聊聊Java内省Introspector

    前提 这篇文章主要分析一下Introspector(内省,应该读xing第三声,没有找到很好的翻译,下文暂且这样称呼)的用法.Introspector是一个专门处理JavaBean的工具类,用来获取J ...

随机推荐

  1. [Spring] - Property注入

    使用Spring注入Properies文件方法: 1.src中新建一个settings.properties文件,内容如下: db_driverClassName=com.mysql.jdbc.Dri ...

  2. 解决R速度太慢问题

    R的速度慢一直被人诟病,最近做一个比较大的dataset的分析,跑得实在太慢,发现症结是R的data frame的index太慢: 以下为测试: gene_list = 1:100000 eQTL_m ...

  3. Oracle 12c SYSAUX表空间不足处理-清理audsys.cli_swp$a9b5f52c$1$1表

    今天在检查一台测试环境的表空间时,发现SYSAUX的使用率已经达到99.91% TABLESPACE_NAME FILES Freesize(MB) Usedsize(MB) Filesize(MB) ...

  4. ajax 请求 对json传的处理 Jquery 使用Ajax获取后台返回的Json数据后,页面处理

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. 加速你的py.test, pytest-dist

    URL: https://pypi.python.org/pypi/pytest-xdist 多线程跑测试 Command: py.test -d --tx 3*popen

  6. trace工具,c++/c#/python

    下载地址: http://files.cnblogs.com/files/wjx0912/xtrace.rar 很方便的调试工具,已在c#,  vc2015, python2.7.10环境下测试. 闭 ...

  7. DedeCMS织梦动态分页类,datalist标签使用实例

    <?php require_once(dirname(__FILE__)."/include/common.inc.php");//载入基础文件 require_once(D ...

  8. pt-find 使用实例

    pt-find - Find MySQL tables and execute actions, like GNU find. 用法:pt-find [OPTION...] [DATABASE...] ...

  9. 也谈谈规范JS代码的几个注意点

    也谈谈规范JS代码的几个注意点 写JS代码差不多也有两年了吧,从刚开始的“初生牛犊不怕虎”乱写一通到后来也慢慢知道去规范一下自己写的代码.这种感觉就像是代码是你的作品,你希望它保持一份不仅干净而且也优 ...

  10. 关于初次使用Verilog HDL语言需要懂的基本语法

    关于初次使用Verilog HDL语言需要懂的基本语法 1.常量 数字表达式全面的描述方式为:<位宽><进制><数字> 8’b10101100,表示位宽为8的二进制 ...