内省(introspector)------>JavaBean
    1、问什么要学内省?
        开发框架时,经常需要Java对象的属性来来封装程序的数据,每次使用反射技术完成此操作过于麻烦,所以SUN
        公司开发了一套API,专门操作Java对象的属性
    2、什么是JavaBean和属性的读写方法?
    3、通过内省技术访问(Java.beans包提供了内省的API)JavaBean的两张方式
        贱人 小婊砸 矫情 &、通过introspector类获取Bean对象的BeanInfo,然后通过BeanInfo来获取属性的描述器(PropertyDescriptor)
           通过这个属性器,就可以获取某个属性对应getter和setter方法,然后通过反射机制来调用这些方法
        &、通过PropertyDescriptor类操作Bean的属性
-------------------------------------------------
private String name="mumu";//字段
    private int age;//字段
    private Date birthdy;
    public String getName(){//属性指的是设置获取setter和读写getter的字段的方法
        return name;
    }
    public Date getBirthdy() {
        return birthdy;
    }
    public void setBirthdy(Date birthdy) {
        this.birthdy = birthdy;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getAbc(){//属性:属性的名称是abc
        return "abc";
    }
-------------------------------------------------

一、内省:操作属性的(类中的getter和setter方法)
        得到student类属,封装到BeanInfo中
        BeanInfo  bean = Introspector.getBeanInfo(Student.class);
        得到类中的所有属性描述器
        PropertyDescriptor[]  pd = bean.getPropertyDescriptors();
        system.out.println(pd.length);//打印出来Student类中属性的长度

for(PropertyDescriptor p:pd){//属性:属性的名称是abc
            system.out.println(p.getName());//打印出属性name的值
        }
    二、// PropertyDescriptor(String propertyName, Class<?> beanClass)
        // 通过调用 getFoo 和 setFoo 存取方法,为符合标准 Java 约定的属性构造一个 PropertyDescriptor。

//创建student对象
        Student s = new Student();
        //得到类中的属性描述器
        PropertyDescriptor  p = new PropertyDescriptor("name",Student.class);//name为属性的名称,Student.class为student的字节码

Method m = p.getReadMethod();//得到getName()的方法
        //得到的是string类型的值
        String str = (String)m.invoke(s,null);//s:为那个对象的;null:表示传入的值,次返回的是Object的值,请转换成String类型的值
        sysotem.out.println(str);
        //设置属性的值
        Method me = p.getWriteMethod();//得到setName()的值
        me.invoke(s,"xiaomumu");
        system.out.println(s.getName());
    三、//利用BeanUtils框架来操作属性

//创建student对象
        Student  s= new Student();
        //调用getName()方法
        String str = BeanUtils.getProperty(s,"name");//s:表示为那个对象的,"name":表示为对象中名称为“name”属性的方法
        sysotem.out.pritnln(str);
        //设置name属性的值
         BeansUtils.setProperty(s,"name",value);s:表示为那个对象的,"name":表示为对象中名称为“name”属性的方法,value:表示所输入的值
         system.out.println(s.getName());//打印修改后:属性名称为name的值
    四、//BeanUtils可以进行类型的自动装换,但仅限于基本类型之间,如:需要int类型的,输入String类型的也可以
        //创建student对象
        Student s = new Student();

String str = BeanUtils.getProperty(s,"age");//得到getAge()方法
        system.out.println(str);
        //设置age属性的值

BeanUtils.setProperty(s,"age","12");//设置age字段的值为字符串,beanUtils可以进行自动的转换
        system.out.println(s.getAge());

五、//对于非基本类型的设置
        //用户输入的都是字符类型
        //String <---------->和其他类型之间的互相装换
        //用户看到的都是string类型的

Student  s = new Student();

//给BeanUtils注册类型装换器

//new DateLocaleConverter():转化成本地类型

ConvertUtils.register(new converter(){//匿名内部类实现内部类   register:注册类型转换器,给什么类型,转换成想要得到的类型
            //type:目标类型,也就是想要转换成的类型
            //value:当前传入的值
        public Object convert(Class type, Objcet value){}
            // if(value.equals(Date.class)){
            // //字符串转换成Date类型
            // }else{
            // //Date转换成字符串类型
            // }

DateFormat df = new simpleDateFormat("yyyy-MM-dd");
        //传入String的值
        if(value instanceof String){//instanceof:实类化对象
        //字符串数据类型转换成Date数据类型
        String str = (String)value;
        try{
            Date dt = df.prase();//把字符串类型的数据解析成Date类型
            return dt;
        }cache(Exception e){
            throw new RuntimeException(e);
        }
        
        
        }else{
        //Date数据类型转换成String类型
        Date d = (Date)value;
        String  str=df.format(d);
        return s;
        
        }
        BeanUtils.setProperty(s,"birthdy","3002-03-03");
        system.out.println(s.getBirthdy());

},Date.class);
    六、//利用BeanUtils封装数据
        Map  map = new HashMap();

map.put("name","xiaomumu");
        map.put("age",18);
        map.put("birthdy","2001-01-01");

Person p = new Person();
        //封装数据前
        System.out.println("封装数据前:"+p);
        CovertUtils.register(new DateLocaleConverter(),Date.class);
        BeanUtils.populate(p,map);
        System.out.println("封装数据后:"+p);

内省(introspector)------>JavaBean的更多相关文章

  1. 内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、注解的基本属性和高级属性

      本文转载自:http://blog.sina.com.cn/s/blog_5d65a16901011kom.html 关键字:内省.JavaBean.PropertyDescriptor类.Int ...

  2. 内省(Introspector)

    内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法 目的:主要用于传递数据信息,这种类中的方法主要用于访问私有的字段(且方法名符合某种命名规则) p ...

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

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

  4. Java:内省(Introspector)

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

  5. JavaBeans与内省(Introspector)

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

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

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

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

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

  8. Java 内省(Introspector)和 BeanUtils

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

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

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

随机推荐

  1. 关于opacity的兼容问题

    各个浏览器的解决办法: css: .opacity{ filter:alpha(opacity=50); /* IE */ -moz-opacity:0.5; /* 老版Mozilla */ -kht ...

  2. mysql语句中日期函数和日期的加减运算

    一.秒数和时钟格式的互相转化 SEC_TO_TIME(seconds) 返回seconds参数,变换成小时.分钟和秒,值以'HH:MM:SS'或HHMMSS格式化,取决于函数是在一个字符串还是在数字. ...

  3. 配置Java开发IDE

    http://www.cnblogs.com/feichexia/archive/2012/11/07/Vim_JavaIDE.html

  4. C#实现Excel的导入导出

    Excel作为日常使用工具,在开发过程中经常会用到其导入导出功能.经过一个小的练习,学习了下导入导出功能. 导出篇: 从数据库查询到所要导出的数据,以xml的形势保存下来,最后输出excel的格式,保 ...

  5. NoClassDefFoundError

    //Java对象转化json格式 public static void toJsonByJettisonMappedXmlDriver(){ try { User user = getUser(); ...

  6. Android APP使用NDK编译后的ffmpeg库出现undefined reference to 'posix_memalign'错误

    在android程序中使用NDK编译后的ffmpeg库的时候出现了如下错误: jni/libs/libavutil.a(mem.o): in function av_malloc:libavutil/ ...

  7. MVC教程相关

    本教程所有文章导航 本系列共10篇文章,翻译自Asp.Net MVC4 官方教程,由于本系列文章言简意赅,篇幅适中,从一个示例开始讲解,全文最终完成了一个管理影片的小系统,非常适合新手入门Asp.Ne ...

  8. SharePoint Framework 开发工具和库

    博客地址:http://blog.csdn.net/FoxDave SharePoint Framework包含一些客户端JavaScript库,你可以用来构建自己的解决方案.本文提供了你可以用来 ...

  9. Longest Substring Without Repeating Characters(Difficulty: Medium)

    题目: Given a string, find the length of the longest substring without repeating characters. Examples: ...

  10. Amoeba for MySQL读写分离配置

    一.      安装和运行Amoeba 1. Amoeba for MySQL 架构: 2. 验证Java的安装Amoeba框架是基于Java SE1.5开发的,建议使用Java SE1.5以上的版本 ...