究竟是内省还是内省

开发 后端
中国文化之博大精深之内省还是内省,究竟他是读(xing)还是(sheng)呢,通过百度引擎貌似晓得,他是读(xing)。下面我们就对内省做一下简单介绍:

中国文化之博大精深之内省还是内省,究竟他是读(xing)还是(sheng)呢,通过百度引擎貌似晓得,他是读(xing)。

下面我们就对内省做一下简单介绍:

1.内省是java语言对bean类属性、事件的一种处理方法

2.为什么要学内省?开发框架时,经常需要使用java对象的属性来封装程序的数据,每次都使用反射技术完成此类操作过于麻烦,所以sun公司开发了一套API,专门用于操作java对象的属性。

3.内省访问JavaBean属性的两种方式:

通过PropertyDescriptor类操作Bean的属性

通过Introspector类获得Bean对象的 BeanInfo,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后通过反射机制来调用这些方法。

下面写一下测试代码

Java代码

 

/*    
     * 通过Introspector类获得Bean对象的 BeanInfo, 然后通过 BeanInfo 来获取属性的描述器(    
     * PropertyDescriptor ) 通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,    
     * 然后通过反射机制来调用这些方法。    
     */    
    @Test    
    public void test() throws IntrospectionException, IllegalArgumentException,     
            IllegalAccessException, InvocationTargetException {     
        Student st = new Student();     
        // 1、通过Introspector类获得Bean对象的 BeanInfo,     
        BeanInfo entity = Introspector.getBeanInfo(Student.class);     
        // 2、然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor )     
        PropertyDescriptor pdrs[] = entity.getPropertyDescriptors();     
        // 3、通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,     
        for (PropertyDescriptor pd : pdrs) {     
            // System.out.println(pd.getName());     
            /*    
             * System.out.println(pd.getShortDescription());    
             * System.out.println(pd.getDisplayName());    
             */    
            if (pd.getName().equals("age")) {  //age是什么类型?     
                Method md = pd.getWriteMethod();     
                md.invoke(st, 12);     
            }     
        }     
             
//      System.out.println(st.getAge());     
    
    }   
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

bean类

Java代码

 

package cn.csdn.Introspector;     
    
public class Student {     
    private String name;     
    private int age;     
    public int getAge() {     
        return age;     
    }     
    public void setAge(int age) {     
        this.age = age;     
    }     
    public String getEmail() {     
        return email;     
    }     
    public void setEmail(String email) {     
        this.email = email;     
    }     
    private String email;     
    public String getXxx(){     
        return "Longmanfei";     
    }     
}   
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.

【编辑推荐】

  1. 深入理解Java的内省与反射
  2. 关于Java反射机制的一个实例
  3. Jython的内省服务:更简单的内省方式
  4. 使用Java 5特性来简化反射编程
  5. 反射在Java Swing编程中的应用
责任编辑:金贺 来源: JavaEye博客
相关推荐

2018-07-05 16:15:26

缓存数据cache miss

2012-08-20 10:34:07

软件开发开发软件

2010-06-28 14:47:45

云计算

2016-11-01 15:16:52

QQ状态即时通讯

2021-01-05 09:23:49

网页端消息

2024-10-18 14:43:31

2009-05-06 16:10:17

Java传值引用

2019-10-21 13:58:22

爬虫互联网程序员

2019-04-26 13:55:02

Istio微服务架构

2011-02-16 16:13:40

Debian

2009-07-14 18:09:08

Jython的内省

2019-02-14 10:10:11

系统厂商芯片

2020-05-07 10:53:04

人工智能技术开发

2020-05-06 18:32:37

人工智能AI制药

2020-06-11 09:18:34

动静分离架构架构设计开发

2010-08-24 09:19:59

2019-07-22 15:29:53

JavaScriptGitHub语言

2019-06-04 14:15:08

JavaScript V8前端

2020-12-22 21:24:45

在线状态服务端状态状态同步

2017-08-16 09:13:27

共享充电
点赞
收藏

51CTO技术栈公众号