内省(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. C++ 基本知識回顧

    ---------------------------------------------------------------------------------------------------- ...

  2. asp.net 动态添加自定义控件

    前两天一直纠结asp.net动态添加控件后,后台获取不到控件的问题,查看了网上很多的回答,可能自己的理解有误或者自己所掌握的知识有限,都没有解决我遇到的问题,经过两天的研究,终于把问题解决了. 我这里 ...

  3. Grand Central Dispatch(GCD)

     GCD      GCD是异步执行任务的技术之一. GCD使用很简洁的记述方法,实现了极为复杂繁琐的多线程编程. dispatch_async(queue, ^{      //长时间处理     ...

  4. crontab不能正确执行的问题

    近期在部署crontab任务的时候,总是遇到在shell中单独执行正常,但是放到crontab定时执行出错的问题.若出现这类场景,九成就是环境变量的问题. 因为我的定制任务,基本上都需要使用sqlpl ...

  5. python数据结构与算法——图的广度优先和深度优先的算法

    根据维基百科的伪代码实现: 广度优先BFS: 使用队列,集合 标记初始结点已被发现,放入队列 每次循环从队列弹出一个结点 将该节点的所有相连结点放入队列,并标记已被发现 通过队列,将迷宫路口所有的门打 ...

  6. springmvc学习笔记--Interceptor机制和实践

    前言: Spring的AOP理念, 以及j2ee中责任链(过滤器链)的设计模式, 确实深入人心, 处处可以看到它的身影. 这次借项目空闲, 来总结一下SpringMVC的Interceptor机制, ...

  7. xmind的第八天笔记

  8. HDU 3966 Aragorn's Story

    题意:给一棵树,并给定各个点权的值,然后有3种操作:I C1 C2 K: 把C1与C2的路径上的所有点权值加上KD C1 C2 K:把C1与C2的路径上的所有点权值减去KQ C:查询节点编号为C的权值 ...

  9. [BZOJ 3209]花神的数论题

    一道简单的数位 dp 题 但是脑子里只有 __builtin_popcountll 了呢(自重) 看完题解后很快就理解了,而且有一种这么简单的题居然没想到做法真是不应该唉~的感觉 用 f[i] 表示 ...

  10. C++访问托管类(C#类库)

    1.新建C# 类库项目Airth,新建类 using System; using System.Collections.Generic; using System.Linq; using System ...