Java反射 Introspector
The Introspector class provides a standard way for tools to learn about the properties, events, and methods supported by a target Java Bean.
Introspector提供了一种标准的方式作为工具来获取类的属性,时间,方法。
// 类属性缓存,空间换时间private static final ConcurrentMap, PropertyDescriptor[]> classPropCache =new ConcurrentHashMap, PropertyDescriptor[]>(64);/*** 获取Bean的属性* @param bean* @return*/private static PropertyDescriptor[] getPropertyDescriptors(Object bean) {Class beanClass = bean.getClass();PropertyDescriptor[] cachePds = classPropCache.get(beanClass);if (null != cachePds) {return cachePds;}try {BeanInfo beanInfo = Introspector.getBeanInfo(beanClass);cachePds = beanInfo.getPropertyDescriptors();classPropCache.put(beanClass, cachePds);return cachePds;} catch (IntrospectionException e) {throw new RuntimeException(e);}}/*** 获取Bean的属性* @param bean bean* @param propertyName 属性名* @return 属性值*/public static Object getProperty(Object bean, String propertyName) {PropertyDescriptor[] beanPds = getPropertyDescriptors(bean);for (PropertyDescriptor propertyDescriptor : beanPds) {if (propertyDescriptor.getName().equals(propertyName)){Method readMethod = propertyDescriptor.getReadMethod();if (null == readMethod) {continue;}if (!readMethod.isAccessible()) {readMethod.setAccessible(true);}try {return readMethod.invoke(bean);} catch (Throwable ex) {throw new RuntimeException("Could not read property '" + propertyName + "' from bean", ex);}}}return null;}/*** 设置Bean属性* @param bean bean* @param propertyName 属性名* @param value 属性值*/public static void setProperty(Object bean, String propertyName, Object value) {PropertyDescriptor[] beanPds = getPropertyDescriptors(bean);for (PropertyDescriptor propertyDescriptor : beanPds) {if (propertyDescriptor.getName().equals(propertyName)){Method writeMethod = propertyDescriptor.getWriteMethod();if (null == writeMethod) {continue;}if (!writeMethod.isAccessible()) {writeMethod.setAccessible(true);}try {writeMethod.invoke(bean, value);} catch (Throwable ex) {throw new RuntimeException("Could not set property '" + propertyName + "' to bean", ex);}}}}
Java反射 Introspector的更多相关文章
- JAVA内省(Introspector)
什么是Java内省:内省是Java语言对Bean类属性.事件的一种缺省处理方法. Java内省的作用:一般在开发框架时,当需要操作一个JavaBean时,如果一直用反射来操作,显得很麻烦:所以sun公 ...
- java 反射,注解,泛型,内省(高级知识点)
Java反射 1.Java反射是Java被视为动态(或准动态)语言的一个关键性质.这个机制允许程序在运行时透过Reflection APIs 取得任何一个已知名称的class的内部信息, 包括 ...
- Java 内省 Introspector
操纵类的属性,有两种方法 反射 内省 面向对象的编程中,对于用户提交过来的数据,要封装成一个javaBean,也就是对象 其中Bean的属性不是由字段来决定的,而是由get和Set方法来决定的 pub ...
- Java反射机制详解(3) -java的反射和代理实现IOC模式 模拟spring
IOC(Inverse of Control) 可翻译为“控制反转”,但大多数人都习惯将它称为“依赖注入”.在Spring中,通过IOC可以将实现类.参数信息等配置在其对应的配置文件中,那么当 需要更 ...
- Java 反射和内省实现spring的IOC和DI
1.构造两个JavaBean package com.spring.model; public class People { private Car car; public Car getCar() ...
- java反射知识点总结
一.java反射基础 1.1 什么叫java反射? 答:程序运行期间,动态的获取类的基本信息.比如:创建对象,调用类的方法,获得类的基本结构.这样给程序设计提供了很大的灵活性.个人总结就是:根据动态需 ...
- Java反射之对JavaBean的内省操作
上一篇我们说了Java反射之数组的反射应用 这篇我们来模拟实现那些javabean的框架(BeanUtils)的基本操作. [一] 什么是JavaBean JavaBean 是一种JAVA语言写成的可 ...
- 第28章 java反射机制
java反射机制 1.类加载机制 1.1.jvm和类 运行Java程序:java 带有main方法的类名 之后java会启动jvm,并加载字节码(字节码就是一个类在内存空间的状态) 当调用java命令 ...
- Java反射机制
Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射: 静态编译:在编译时确定类型,绑定对象,即通过 ...
随机推荐
- Python处理大数据
起因 Python处理一下数据,大概有六七个G,然后再存到另外一个文件中,单线程跑起来发现太慢了,数据总量大概是千万行的级别,然后每秒钟只能处理不到20行--遂想怎么提高一下速度 尝试1-multip ...
- 【转】解决Lost connection to MySQL server during query错误方法
初步判断是MySQL可能挂掉了,在系统服务里面查看MySQL的进程并没有停止. 最开始考虑是数据库结构不对,但是我是通过Navicat for MySQL的备份和恢复备份导入数据,应该表结构都在备份文 ...
- 面试总结:QuickSort 解析
Quick Sort http://en.wikipedia.org/wiki/Quicksort Quicksort, or partition-exchange sort, is a sortin ...
- delphi判断线程是否正在运行
相关资料:http://www.delphitop.com/html/xiancheng/376.html unit Unit1; interface uses Winapi.Windows, Win ...
- CentOS重置Mysql密码
1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下,其他的用户也可以任意地登录 ...
- mysql的骚操作:自增长的字段同时插入到另一个字段
如题 ' ); select * from information_schema.tables where table_schema ='mytest' and table_name='users'; ...
- C语言 · 连续正整数的和
算法训练 连续正整数的和 时间限制:1.0s 内存限制:256.0MB 问题描述 78这个数可以表示为连续正整数的和,1+2+3,18+19+20+21,25+26+27. 输入一个 ...
- UltraEdit 常用快捷方式
Ctrl+N :创建一个新文件 Ctrl+O :打开文件 Ctrl+Q :快速打开文件 Ctrl+F4 :关闭文件 Ctrl+S :保存活动文件 F12 :另存为 Ctrl+P :打印当前活动文件 C ...
- [code]代码格式1
格式 /********************************************************************************* *Copyright(C), ...
- TCP/IP协议栈
TCP/IP协议栈包含TCP层.IP层.链路层.NIC驱动等. 参考: 1. 全面了解linux TCP/IP协议栈 2. 跟我学TCP/IP系列