`
流浪鱼
  • 浏览: 1693842 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Introspector的使用

    博客分类:
  • java
 
阅读更多

 

根据属性名和类Class得到数据

 

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * Introspector的使用
 * @author 流浪鱼
 *
 */
public class IntrospectorDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws IllegalArgumentException,  IntrospectionException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { 
		 UserInfo userInfo=new UserInfo("zhangsan", "123456"); 
		 String propertyName="userName"; 
		 Object retVal=getProperty(userInfo, propertyName);
		 System.out.println("retVal="+retVal);//retVal=zhangsan 
		 Object value="abc"; 
		 setProperty(userInfo, propertyName, value);
		 retVal=getProperty(userInfo, propertyName);
		 System.out.println("retVal="+retVal); //retVal=abc 27
		/*使用BeanUtils工具包操作JavaBean org.apache.commons.beanutils.BeanUtils
		String userName=BeanUtils.getProperty(userInfo, propertyName); 
		System.out.println("userName="+userName);
		BeanUtils.setProperty(userInfo, propertyName, "linjiqin"); 
		userName=BeanUtils.getProperty(userInfo, propertyName);
		System.out.println("userName="+userName); 
		*/
	}
	
	/**
	 * 
	 * @param clazz
	 * @param propertyName
	 * @return
	 * @throws IntrospectionException 
	 * @throws InvocationTargetException 
	 * @throws IllegalAccessException 
	 * @throws IllegalArgumentException 
	 */
	private static Object getProperty(Object clazz, String propertyName) throws IntrospectionException, IllegalArgumentException, IllegalAccessException, InvocationTargetException{
		/*方法1
		PropertyDescriptor pd=new PropertyDescriptor(propertyName, clazz.getClass());
		Method methodGet=pd.getReadMethod();
		return methodGet.invoke(clazz);
		*/
		 Object retVal=null;
		 BeanInfo beanInfo=Introspector.getBeanInfo(clazz.getClass());
		 PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors();
		 for(PropertyDescriptor pd:pds){
			 if(propertyName.equals(pd.getName())){
				 Method methodGet=pd.getReadMethod();
				 retVal=methodGet.invoke(clazz);
				 break;
			}
		}
		return retVal;
		
	}
	
	/**
	 		* 设置属性
	      * 
	      * @param clazz 对象名
	      * @param propertyName 属性名
	      * @param value 属性值
	      */
	     private static void setProperty(Object clazz, String propertyName, Object value) 
	            throws IntrospectionException,IllegalAccessException, InvocationTargetException{
	         //方法一
	         /*PropertyDescriptor pd=new PropertyDescriptor(propertyName, clazz.getClass());
	         Method methodSet=pd.getWriteMethod();
	         methodSet.invoke(clazz, value);*/
	         
	         //方法二
	          BeanInfo beanInfo=Introspector.getBeanInfo(clazz.getClass());
	         PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors();
	         for(PropertyDescriptor pd:pds){
	             if(propertyName.equals(pd.getName())){
	                 Method methodSet=pd.getWriteMethod();
	                 methodSet.invoke(clazz, value);
	                 break;
	             }
	         }
	     }
	

}

 

 

/**
 * IntrospectorDemo测试需要的JavaBean
 * @author 流浪鱼
 *
 */
public class UserInfo {
	private String userName;
	private String pwd;
	
	
	public UserInfo(String userName, String pwd) {
		super();
		this.userName = userName;
		this.pwd = pwd;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	
}
 

 

分享到:
评论

相关推荐

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

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

    使用struts2的Introspector做日志

    在Struts2中,Introspector是一个核心组件,用于检查和获取Action类的属性,这对于实现诸如日志记录、数据验证等任务非常有用。这篇博客文章可能探讨了如何利用Struts2的Introspector来实现日志功能。 日志在软件...

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

    在提供的代码示例中,`test01()` 函数展示了如何使用`Introspector.getBeanInfo(Student.class).getPropertyDescriptors();` 获取Student类的所有属性描述符。属性描述符(PropertyDescriptor)封装了JavaBean的...

    java实现Object和Map之间的转换3种方式

    使用 Introspector 库可以实现 Object 和 Map 之间的转换。Introspector 库提供了 BeanInfo 对象,可以将 Object 对象转换为 Map 对象。 ```java public Map, Object> obj2Map(Object obj) throws Exception { Map...

    Neo4j GraphQL 库(graphql--neo4j-introspector-1.0.1.zip)

    Neo4j GraphQL 库(graphql--neo4j-introspector-1.0.1.zip) 源代码。 Neo4j GraphQL 库是一个高度灵活、低代码、开源的 JavaScript 库,可通过利用连接数据的力量为跨平台和移动应用程序实现快速 API 开发。 ...

    Neo4j GraphQL 库(graphql--neo4j-introspector-1.0.1.tar.gz)

    Neo4j GraphQL 库(graphql--neo4j-introspector-1.0.1.tar.gz) 源代码。 Neo4j GraphQL 库是一个高度灵活、低代码、开源的 JavaScript 库,可通过利用连接数据的力量为跨平台和移动应用程序实现快速 API 开发。 ...

    java-beans-lite:轻量级且快速的java.beans.Introspector实现

    由于它与AWT的紧密依赖,因此无法轻易将其从java.desktop模块中删除,从而导致任何使用java.beans包的第三方库都依赖于所有java.desktop类,从而在JVM安装中增加了12mb的额外开销,并且一些额外的内存使用情况。...

    Python库 | plone.introspector-0.1.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:plone.introspector-0.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

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

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

    php-introspector

    使用 Atom 包管理器,它可以在设置视图中找到,或者从命令行运行apm install php-introspector 。 您还需要安装软件包。 用法 目前,自动完成依赖于从远程(或本地)服务器获取建议。 它从文件中读取此服务器的位置...

    Java 内省(Introspector)深入理解

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

    RDF Software Introspector-开源

    Introspector使处理源代码的编程工具(例如编译器)能够以标准且中立的方式进行通信,从而减少了意外的编程成本。 http://github.com/h4ck3rm1k3/

    Spring源码学习十三:IntrospectorCleanupListener解析1

    为了解决这个问题,我们可以在使用完`Introspector`之后调用`Introspector.flushCaches()`方法,清除缓存以避免内存泄漏。 `IntrospectorCleanupListener`是Spring框架为了进一步防止这种内存泄漏而设计的一个监听...

    使用betwixt进行xml与java类之间的互转解析--代码

    本篇文章将深入探讨如何使用Betwixt库实现XML与Java类之间的互转解析。 首先,我们需要理解Betwixt的基本概念。Betwixt是一个XML绑定工具,它允许开发者通过注解或XML配置文件来映射XML结构与Java类的属性。这种...

    openbeans1.0.zip

    //import java.beans.Introspector; //import java.beans.PropertyDescriptor; import com.googlecode.openbeans.BeanInfo; import com.googlecode.openbeans.IntrospectionException; import ...

    Eclipse OLE Introspector-开源

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

    javabeans开发使用手册

    - **设计时支持**:通过JavaBeans Architecture(如Introspector和BeanInfo)提供设计时信息,增强IDE的可视化编辑能力。 - **国际化**:使用ResourceBundle支持多语言环境。 7. **资源** "中国IT认证实验室学习...

    beanutils-1.9.3-bin

    BeanUtils是由Apache公司开发的针对操作JavaBean的工具包。...但是由Apache公司开发的BeanUtils会更常用,同时,BeanUtils还需要配合第三方日志工具来使用,这里我们同样使用Apache公司的common logging

    xml转换java对象

    通过使用Betwixt,开发者可以轻松地将XML文档解析为Java对象,或者将Java对象序列化为XML文档。这极大地简化了数据交换和持久化的过程。 在本例子中,我们使用的版本是`commons-betwixt-0.8.jar`。这个库包含了一组...

    tajin-framework-all-2.22.zip

    此次我们关注的是一款名为"Tajin Framework All 2.22"的压缩包,其中包含了名为"app-introspector.zip"的Spring插件。这个插件是一个强大的工具,专为在运行时诊断和检查Spring Bean而设计,其核心功能是通过JSON...

Global site tag (gtag.js) - Google Analytics