内省(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. [SQL Basics] Indexes

    An index is used to speed up searching in the database. By default, when you create this table, your ...

  2. [转]LUA元表

    lua元表和元方法 <lua程序设计> 13章 读书笔记 lua中每个值都有一个元表,talble和userdata可以有各自独立的元表,而其它类型的值则共享其类型所属的单一元表.lua在 ...

  3. FreeBSD打开DTrace支持

    主要翻译自:https://wiki.freebsd.org/DTrace FreeBSD跟Linux发行版一个比较大的差异,就是提倡源码构建.因此这里提到比较多的编译开关设置.自2012年5月后,D ...

  4. js常用字符串方法汇总

    concat()将两个或多个字符的文本组合起来,返回一个新的字符串. var a = "hello"; var b = ",world"; var c = a. ...

  5. Socket编程基础——Socket选项

    有些情况下,我们需要对Socket行为和属性进一步控制,例如修改缓冲区大小,查看Socket状态,这就需要设置/获取Socket选项. 1.获取Socket选项int getsockopt(SOCKE ...

  6. 一个共享内存hash

    Background 我们的多进程程序碰到一个需求:做key-value查询,然后拿获取到的value去做一些事情.这些key-value存储在很多词典文件中,数量级>10w,如果每个进程都加载 ...

  7. HDU 1796 容斥原理

    How many integers can you find Time Limit: 12000/5000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  8. codeforces195a

    link:http://codeforces.com/problemset/problem/336/A 很简单的一道题目,当初有个单词不认识,isosceles原来意思是等腰的o(╯□╰)o #inc ...

  9. java之框架

    框架有哪些?C++语言的QT.MFC.gtk,Java语言的SSH,php语言的 smarty(MVC模式),python语言的django(MTV模式)等等设计模式有哪些?工厂模式.适配器模式.策略 ...

  10. 处理畅捷通的T+ 12.0版,web服务无故自动停止的问题

    用了几个月的畅捷通T+ 12.0版,一直都挺正常,但最近这两周,出现了好几次web服务自动停止的情况,今天抽空仔细看了Windows的日志,发现在半夜2点左右,TPlusProWebService12 ...