Introspector 内省是javase里很基础的知识点了,但在做项目的时候经常会使用到, struts2的action(还有struts1的formbean)也使用了内省机制提供的实现。前台的form标签具有一些属性(在配置文件中知道这个form提交到那个action,而这个action有和这个form相对应的属性及其 get/set),提交以后,由struts的servlet拦下来转发给某个具体的action.而在转发给action之前struts通过内省的方 式将form中的值set到了action中去。
一、Java内省机制
内省是 Java 语言对 Bean 类属性、事件的一种处理方法(也就是说给定一个javabean对象,我们就可以得到/调用它的所有的get/set方法)。
例如类 IntroBean 中有属性 name, value那我们可以通过 getName,setName 来得到其值或者设置新的值。通过 getName/setName 来访问 name 属性,这就是默认的规则。
Java 中提供了一套 API 用来访问某个属性的 getter/setter 方法,通过这些 API 可以使你不需要了解这个规则,这些 API 存放于包 java.beans 中。
一般的做法是通过类 Introspector 来获取某个对象的 BeanInfo 信息,然后通过 BeanInfo 来获取属性的描述器( PropertyDescriptor ),
通过这个属性描述器就可以获取某个属性对应的 getter/setter 方法,然后我们就可以通过反射机制来调用这些方法。
即使 类里没有 doub属性,只要类里有getDoub,setDoub属性,我们也可以通过BeanInfo来获取属性的描述器,再通过这个属性描述器就获取 getter/setter 方法 :看下下面代码来理解。
提供一个IntroBean 这样一个简单的bean类,其中没有doub属性,但提供了个getDoub ,setDoub方法
package com.jian; public class IntroBean { String name; Integer value; public Double getDoub() { System.out.println("invoke getdoub!"); return null; } public void setDoub(Double doub) { System.out.println("invoke setdoub"); } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getValue() { return value; } public void setValue(Integer value) { this.value = value; } public void Value(Integer value) { } public void aaValue(Integer value) { } }
从下面可以看出是根据bean 类里的set ,get 方法来构建PropertyDescriptor
package com.jian; import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PropertyDescriptor; public class IntrospectorTest { public static void main(String[] args) throws IntrospectionException { BeanInfo bi= Introspector.getBeanInfo(IntroBean.class,Object.class); PropertyDescriptor[] pd= bi.getPropertyDescriptors(); String np; for(int i=0;i<pd.length;i++){ np= pd[i].getReadMethod().getName();//ReadMethod就是读取,相当于getMethod(); System.out.println("read ="+np); np=pd[i].getWriteMethod().getName();//WriteMethod就是设置,相当于setMethod(); System.out.println("write ="+np); System.out.println("----------------"); } } } 运行结果: read =getDoub write =setDoub ---------------- read =getName write =setName ---------------- read =getValue write =setValue ----------------
即使 类里没有 doub属性,只要类里有getDoub,setDoub属性,我们也可以通过BeanInfo来获取属性的描述器(PropertyDescriptor),再通过这个属性描述器就获取 getter/setter 方法.
相关推荐
"JAVA的内省机制(introspector)与反射机制(reflection)" JAVA 的内省机制(introspector)和反射机制(reflection)是两个重要的概念,在 JAVA 编程中扮演着至关重要的角色。那么,什么是内省机制和反射机制?它们...
Java 内省(Introspection)是Java提供的一种机制,允许程序在运行时检查对象的属性和方法。在Java中,内省主要用于处理JavaBean,即遵循特定规范的类,通常包含get、set方法以及默认构造器。JavaBean类使得数据封装...
Java内省(Introspector)是Java语言提供的一种机制,用于在运行时分析Java对象的属性、方法和事件。...了解并熟练掌握Java内省机制,可以提高代码的灵活性和可维护性,尤其是在处理基于JavaBean的复杂系统时。
内省(Introspection)则是Java提供的一种用于获取和修改对象属性的能力,主要通过java.beans包中的Introspector和PropertyDescriptor类实现。它主要用于处理JavaBeans规范的对象,可以获取Bean的属性、事件和方法...
在 J2EE 应用中,内省机制常用于框架自动识别 JavaBean 的属性,并根据这些属性进行相应的操作,例如:在容器中自动注入依赖。 ### 总结 JavaBean 作为一种标准的组件模型,在 Java 开发中起着重要作用。它不仅有...
通过内省机制,框架能够将HTTP请求中的表单数据自动映射到Bean的属性上,前提是这些属性具有相应的getter和setter方法。 #### 四、总结 反射和内省都是Java中非常强大的特性,能够显著提高程序的灵活性和可扩展性...
内省机制(Introspection)是Java提供的一种工具,用于获取和操作JavaBeans对象的属性。例如,通过Introspector、BeanInfo和PropertyDescriptor等类,可以方便地获取和设置JavaBean的属性值。 BeanUtils是Apache ...
在Java中,Sun公司提供的内省(Introspection)API,如java.beans.PropertyDescriptor和java.beans.Introspector,虽然强大但确实相对复杂,不便于开发者快速访问和修改Bean的属性。BeanUtils库则通过提供一套更直观...
BeanUtils 依赖于 commons-beanutils 和 commons-logging 两个 jar 包,它们已经封装好了内省机制,我们无需自己实现。 BeanUtils 提供了多种方法来操作 JavaBean 对象,例如: * void setProperty(bean, name, ...
JavaBeans API提供了一系列的类和接口,如Introspector、PropertyDescriptor、EventSetDescriptor等,用于创建、操作和理解JavaBean的属性、事件和方法。 14.6 JavaBeans的事件处理 事件处理是JavaBeans中的重要...
- 内省:使用Introspector类进行对象属性的获取和设置。 - 注解:理解注解的作用,以及如何自定义注解并配合反射使用。 - 泛型:理解泛型的基本概念,提高代码的类型安全性。 - 代理:学习动态代理和静态代理,...
- 例如:使用`Introspector`和`PropertyDescriptor`来获取和设置对象的属性。 ##### 6. 注解 - **注解**提供了一种在源代码中插入元数据的方式,可以被编译器或者运行时环境所使用。 - 例如:`@Override`注解表示...