使用内省的方式操作JavaBean
- import java.beans.BeanInfo;
- import java.beans.Introspector;
- import java.beans.PropertyDescriptor;
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- /**
- * 使用内省的方式操作JavaBean
- */
- public class IntroSpectorTest {
- public static void main(String[] args) throws Exception {
- ReflectPoint reflectPoint = new ReflectPoint(3,7);
- //调用JavaBean中方法的传统作法
- Class classz = reflectPoint.getClass();
- Field[] fields = classz.getDeclaredFields();
- for (Field field : fields) {
- String name = "set" + field.getName().toUpperCase();
- Method method = classz.getMethod(name, int.class);
- method.invoke(reflectPoint, 3);
- }
- System.out.println(reflectPoint);
- //使用内省的方式调用JavaBean的方法
- String propertyName = "x";
- //获得属性x的值
- Object retVal = getProperty2(reflectPoint, propertyName);
- System.out.println(retVal);
- //设置属性x的值
- setProperty(reflectPoint, propertyName,10);
- System.out.println(reflectPoint.getX());
- }
- /**
- * 设置属性的值
- * @param obj 属性所属的对象
- * @param propertyName 属性名
- * @param propertyValue 属性值
- */
- private static void setProperty(Object obj, String propertyName,Object propertyValue) throws Exception {
- PropertyDescriptor pd2 = new PropertyDescriptor(propertyName,obj.getClass());
- Method setMethod = pd2.getWriteMethod();
- setMethod.invoke(obj, propertyValue);
- }
- /**
- * 获得对象的属性值
- * @param obj 属性所属的对象
- * @param propertyName 属性名
- * @return 属性的值
- */
- private static Object getProperty(Object obj, String propertyName) throws Exception {
- PropertyDescriptor pd = new PropertyDescriptor(propertyName,obj.getClass());
- Method getMethod = pd.getReadMethod(); //获得get方法
- Object retVal = getMethod.invoke(obj);
- return retVal;
- }
- /**
- * 使用内省操作javabean
- * @param obj 属性所属的对象
- * @param propertyName 属性名
- * @return 属性的值
- */
- private static Object getProperty2(Object obj, String propertyName) throws Exception {
- Object retVal = null;
- BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
- PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
- for (PropertyDescriptor pd : pds) {
- if (pd.getName().equals(propertyName)) {
- Method getMethod = pd.getReadMethod();
- retVal = getMethod.invoke(obj);
- break;
- }
- }
- return retVal;
- }
- }
使用内省的方式操作JavaBean的更多相关文章
- 内省机制(操作javaBean的信息)
内省机制(操作javaBean的信息) ----是不是联想到了反射机制了哈,这两者有什么区别呢? 1.内省机制和反射机制的联系 ■ 其实内省机制也是通过反射来实现的,而反射是对一切类都适合去动态获取类 ...
- 使用内省方式操作JavaBean
内省,英文中称作introspector.主要对javaBean进行操作,JavaBean是一个特殊的Java类,该类中方法名符合特定的规则(其实就是getXXX,setXXX),我们一般是利用get ...
- java高新技术-操作javaBean
1. 对javaBean的简单内省操作 public class IntroSpectorTest { public static void main(String[] args) throws Ex ...
- Linux下用文件IO的方式操作GPIO(/sys/class/gpio)
通过sysfs方式控制GPIO,先访问/sys/class/gpio目录,向export文件写入GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction ...
- Linux下用文件IO的方式操作GPIO(/sys/class/gpio)(转)
通过sysfs方式控制GPIO,先访问/sys/class/gpio目录,向export文件写入GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction ...
- Android-Sqlite-OOP方式操作增删改查
之前写的数据库增删改查,是使用SQL语句来实现的,Google 就为Android开发人员考虑,就算不会SQL语句也能实现增删改查,所以就有了OOP面向对象的增删改查方式 其实这种OOP面向对象的增删 ...
- Oracle.DataAccess.dll方式操作oracle数据库
Oracle.DataAccess.dll方式操作oracle数据库 一.查询语句: using (OracleConnection conn = new OracleConnection(Syste ...
- TX2 用文件IO的方式操作GPIO
概述 通过 sysfs 方式控制 GPIO,先访问 /sys/class/gpio 目录,向 export 文件写入 GPIO 编号,使得该 GPIO 的操作接口从内核空间暴露到用户空间,GPIO 的 ...
- Win10 64位系统ADO方式操作数据库失败解决方法
VC操作Access数据库一般通过ODBC.ADO.DAO等方式,但在我的Win10 64位操作系统中,通过ADO方式操作数据库会失败,无法读取数据.解决方法:1.首先确保Win10操作系统ado目录 ...
随机推荐
- Unity Json 之三
今天在网上看到一个simplejson,直接调用这两个API就可以了,简单易用 string jsonstr = SimpleJson.SimpleJson.SerializeObject(json) ...
- 数据库系统概论学习3-SQL 语句和关系代数(一)SQL 入门
3. SQL 语句和关系代数(一)SQL 入门 3.1 数据库的编程语言 SQL 的优点 SQL 集成了数据查询(data query).数据操作(data manipulation).数据定义(da ...
- [RK3288][Android6.0] 调试笔记 --- user版本默认显示开发者选项【转】
本文转载自:https://blog.csdn.net/kris_fei/article/details/70157137 Platform: ROCKCHIPOS: Android 6.0Kerne ...
- 百度竞价推广URL通配符使用说明
{keywordid} 被替换为触发该创意的关键词ID(全局唯一ID,不是字面ID),当没有对应的keywordid时,替换为0. {creative} 被替换为所点击的创意ID(全局唯一ID). 2 ...
- 字符串匹配算法BF和KMP总结
背景 来看一道leetcode题目: Implement strStr(). Returns the index of the first occurrence of needle in haysta ...
- 执行Oracle存储过程报权限不足的解决方法
当前Oracle用户sofa拥有connect.dba.resource的角色权限,但奇怪的是却没有执行Oracle Procedure的权限.后来通过查找资料发现:如果sofa用户需要执行Proce ...
- php二维数组自定义排序
$arr = array( '0' => array('id' =>1,'price'=>200), '1' => array('id' =>2,'price'=> ...
- adb 解说
ADB是一个 客户端-服务器端 程序, 其中客户端是你用来操作的电脑, 服务器端是android设备. 先说安装方法, 电脑上需要安装客户端. 客户端包含在sdk里. 设备上不需要安装, 只需要在手机 ...
- 使用Properties读写属性文件
import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Properties; /*Prop ...
- RGB(16进制)_转_TColor
ZC:内存中 COLORREF就是一个DWORD(从定义"COLORREF = DWORD;"就可以看出来),但是 具体的byte R/G/B 的位置是怎么方式的? ZC:Wind ...