`
jianfulove
  • 浏览: 120260 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
社区版块
存档分类
最新评论

Introspector内省机制

阅读更多

最近忙着开发拎图网图片社区 喜欢的朋友常来逛逛。谢谢.

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 方法.

 

 

2
3
分享到:
评论

相关推荐

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

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

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

    Java 内省(Introspection)是Java提供的一种机制,允许程序在运行时检查对象的属性和方法。在Java中,内省主要用于处理JavaBean,即遵循特定规范的类,通常包含get、set方法以及默认构造器。JavaBean类使得数据封装...

    Java 内省(Introspector)深入理解

    Java内省(Introspector)是Java语言提供的一种机制,用于在运行时分析Java对象的属性、方法和事件。...了解并熟练掌握Java内省机制,可以提高代码的灵活性和可维护性,尤其是在处理基于JavaBean的复杂系统时。

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

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

    JavaBean及内省文档

    在 J2EE 应用中,内省机制常用于框架自动识别 JavaBean 的属性,并根据这些属性进行相应的操作,例如:在容器中自动注入依赖。 ### 总结 JavaBean 作为一种标准的组件模型,在 Java 开发中起着重要作用。它不仅有...

    Java中的内省与反射.doc

    通过内省机制,框架能够将HTTP请求中的表单数据自动映射到Bean的属性上,前提是这些属性具有相应的getter和setter方法。 #### 四、总结 反射和内省都是Java中非常强大的特性,能够显著提高程序的灵活性和可扩展性...

    Java基础学习43.pdf

    内省机制(Introspection)是Java提供的一种工具,用于获取和操作JavaBeans对象的属性。例如,通过Introspector、BeanInfo和PropertyDescriptor等类,可以方便地获取和设置JavaBean的属性值。 BeanUtils是Apache ...

    commons-beanutils-1.9.2-bin.zip

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

    JavaWeb BeanUtils信息类原理详解

    BeanUtils 依赖于 commons-beanutils 和 commons-logging 两个 jar 包,它们已经封装好了内省机制,我们无需自己实现。 BeanUtils 提供了多种方法来操作 JavaBean 对象,例如: * void setProperty(bean, name, ...

    第14章 JavaBeans组件模型.ppt

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

    android 学习路线大纲

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

    java加强笔记

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

Global site tag (gtag.js) - Google Analytics