`

内省(Introspector)

 
阅读更多



内省(Introspector) — JavaBean
 
什么是JavaBean和字段/属性的读写方法?
访问JavaBean属性的两种方式:
    1)直接调用bean的setXXX或getXXX方法。
    2)通过内省技术访问(java.beans包提供了内省的API),内省技术访问也提供了两种方式:属性描述器类(PropertyDescriptor) 和内省类
注意:内省认为JavaBean的属性是与getXxx()有关的
 
 
1.1通过PropertyDescriptor类操作Bean的属性
    通过Introspector类获得Bean对象的 BeanInfo,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法
public void test1() throws Exception{
    Student s = new Student();
    PropertyDescriptor pd = new PropertyDescriptor("name",Student.class);
    Method m = pd.getWriteMethod();
    m.invoke(s,"jack"); //new Student().setName("jack")
    m = pd.getReadMethod();
    String name = (String)m.invoke(s,null); //new Student().getName()
    System.out.println("name="+name);
}

1.2利用内省操作JavaBean的属性
public void test2() throws Exception{
    BeanInfo bi = Introspector.getBeanInfo(Student.class);
    PropertyDescriptor[] pds = bi.getPropertyDescriptors();
    for(PropertyDescriptor pd : pds){
        System.out.println(pd.getName());
    }
}
 
1.3. 衍生出的框架------beanutils工具包
Apache组织开发了一套用于操作JavaBean的API,这套API考虑到了很多实际开发中的应用场景,因此在实际开发中很多程序员使用这套API操作JavaBean,以简化程序代码的编写。 
 

Beanutils工具包的常用类:
    BeanUtils、ConvertUtils.register(Converter convert, Class clazz)、自定义转换器 或 内置转换器
默认情况下将java.lang.String->java.util.Date类型会出错
注册类型转换器:register(Converter converter, java.util.Date.class) 
类型转换器: Objectconvert(java.util.Date, java.lang.String)//查JDK API 
 
自定义的类型转换器:
        /*
        //参数一:转换规则
        //参数二:最终要转换成的类字节码对象
        ConvertUtils.register(new Converter(){
            //参数一:最终要转换成的类字节码对象,即java.util.Date.class
            //参数二:用户输入的类型,即"2012-02-11"字符串
            public Object convert(Class type, Object value) {
                //将String转成java.util.Date类型
                if(type!=null && type==java.util.Date.class){
                    if(value instanceof String){
                        try {
                            String strBirthday = (String)value;
                            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                            return sdf.parse(strBirthday);
                        } catch (ParseException e) {
                            e.printStackTrace();
                        }
                    }
                }
                return null;
            }
        },java.util.Date.class);
        */
 
 
 
 
利用框架操作JavaBean的属性
ConvertUtils.register(new DateLocaleConverter(),Date.class);//
 
Student s = new Student();
BeanUtils bu = new BeanUtils();
bu.setProperty(s, "name", "jack");
bu.setProperty(s, "age", “31");
bu.setProperty(s, "birthday", "1980-7-23");
 
System.out.println(bu.getProperty(s, "name"));
System.out.println(bu.getProperty(s, "age"));

System.out.println(bu.getProperty(s, "birthday"));
 
 
 
 
 
时间转换:
格林威治-->本地时区
Calendar c = Calendar.getInstance();
c.setTime(person.getBirthday());
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
int date = c.get(Calendar.DATE);
 
总结:
1 什么是JavaBean?有何特征?
  1)侠义JavaBean:
    》公共的构造方法
    》私有的字段
    》对每个私有的字段提供公共的存取方法 
  2)广义JavaBean:
    》公共的构造方法
    》私有的字段
    》对每个私有的字段提供公共的存取方法 
    》N个业务方法
  3)存取方法:setUsername()和getUsername()   
 
2 内省API(SUN公司开发)
  1)站在反射的角度去操作JavaBean的属性,即存和取 
  2)属性和如下特性有关:
    >>跟getXxxx()有关
    >>getXxxx()有返回值
    >>每一个JavaBean都会有一个class属性,该属性来自于object 
 
*3 BeanUtils工具(APACHE开源组织开发)
  1)BeanUtils工具也具有与内省一至的功能
  2)减化了内省操作JavaBean的开发步骤
  3)还具有8种基本类型与String之间的自动转化
  4)但凡遇到特定的类型转换时,就需要程序员自行编号类型转换器,该转换器一定要在设置代码之前执行才有效
 
分享到:
评论

相关推荐

    Java 内省introspector相关原理代码解析

    `Introspector` 是Java内省的核心类,它提供了一系列的方法来获取关于JavaBean的信息。例如,`Introspector.getBeanInfo(Class)` 方法可以获取指定类的BeanInfo,这包含了关于类的属性(PropertyDescriptor)、事件...

    JAVA的内省机制(introspector)与反射机制(reflection).docx

    "JAVA的内省机制(introspector)与反射机制(reflection)" JAVA 的内省机制(introspector)和反射机制(reflection)是两个重要的概念,在 JAVA 编程中扮演着至关重要的角色。那么,什么是内省机制和反射机制?它们...

    Java 内省(Introspector)深入理解

    Java内省(Introspector)是Java语言提供的一种机制,用于在运行时分析Java对象的属性、方法和事件。这个特性对于开发人员来说非常有用,因为它允许程序动态地检查和修改对象的状态,而不必了解对象的具体实现细节。...

    用反射和内省技术实现简单SpringIOC

    内省(Introspection)则是Java提供的一种用于获取和修改对象属性的能力,主要通过java.beans包中的Introspector和PropertyDescriptor类实现。它主要用于处理JavaBeans规范的对象,可以获取Bean的属性、事件和方法...

    JavaBean及内省文档

    通过使用 `java.beans.Introspector` 类,可以在运行时发现 JavaBean 的属性并进行操作。 在 J2EE 应用中,内省机制常用于框架自动识别 JavaBean 的属性,并根据这些属性进行相应的操作,例如:在容器中自动注入...

    Java中的内省与反射.doc

    ### Java中的内省与反射详解 #### 一、引言 在深入了解Java语言的过程中,我们会遇到两个重要的概念:反射和内省。这两种技术在实际开发中有着广泛的应用,尤其是在需要进行动态操作或元数据处理的场景下尤为重要...

    Java基础加强(上) 经典ppt

    讲一些经典的:静态导入 自动装箱/拆箱 增强for循环 可变参数 内省(Introspector) — JavaBean ......

    backbone-introspector:骨干应用程序自省-生成应用程序组件的树状图(使用d3.js)

    骨干内省者骨干应用程序自省-生成应用程序组件的树状图(使用d3.js)要求骨干应用装有require.js的模块预习 还检查TodirMVC实现的示例目录安装在您的main.js中require ( ['backbone' ,'views/app' ,'routers/router'...

    php-introspector

    这个包是一个薄包装器,它从内省中检索建议: 安装 使用 Atom 包管理器,它可以在设置视图中找到,或者从命令行运行apm install php-introspector 。 您还需要安装软件包。 用法 目前,自动完成依赖于从远程(或...

    Eclipse OLE Introspector-开源

    Eclipse 平台的 COM 内省器和代码生成器

    commons-beanutils-1.9.2-bin.zip

    在Java中,Sun公司提供的内省(Introspection)API,如java.beans.PropertyDescriptor和java.beans.Introspector,虽然强大但确实相对复杂,不便于开发者快速访问和修改Bean的属性。BeanUtils库则通过提供一套更直观...

    第14章 JavaBeans组件模型.ppt

    JavaBeans API提供了一系列的类和接口,如Introspector、PropertyDescriptor、EventSetDescriptor等,用于创建、操作和理解JavaBean的属性、事件和方法。 14.6 JavaBeans的事件处理 事件处理是JavaBeans中的重要...

    Java基础学习43.pdf

    例如,通过Introspector、BeanInfo和PropertyDescriptor等类,可以方便地获取和设置JavaBean的属性值。 BeanUtils是Apache Commons BeanUtils库的一部分,它提供了一种简单的方式来操作JavaBean的属性,如`...

    android 学习路线大纲

    - 内省:使用Introspector类进行对象属性的获取和设置。 - 注解:理解注解的作用,以及如何自定义注解并配合反射使用。 - 泛型:理解泛型的基本概念,提高代码的类型安全性。 - 代理:学习动态代理和静态代理,...

    JavaWeb BeanUtils信息类原理详解

    每个 JavaBean 对象都对应一个 BeanInfo 对象,我们可以通过 Introspector 类的 getBeanInfo 方法来获取 BeanInfo 对象。该方法的底层实现是通过反射来实现的。 BeanInfo 对象提供了多种方法来获取 JavaBean 对象的...

    java加强笔记

    - 例如:使用`Introspector`和`PropertyDescriptor`来获取和设置对象的属性。 ##### 6. 注解 - **注解**提供了一种在源代码中插入元数据的方式,可以被编译器或者运行时环境所使用。 - 例如:`@Override`注解表示...

Global site tag (gtag.js) - Google Analytics