使用内省的方式操作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目录 ...
随机推荐
- debian下使用dynamic printk分析usb转串口驱动执行流程
看了一篇文章<debug by printing>,文中提到了多种通过printk来调试驱动的方法,其中最有用的就是"Dynamic debugging". “Dyna ...
- leetcode刷题2:两数相加add_two_numbers
题目:两数相加 (难度:中等) 给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字. 将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以 ...
- 初识Spring security-无Security的SpringMVC
百度百科定义: Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了 ...
- 【bzoj4765】普通计算姬(双重分块)
题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4765 这道题已经攒了半年多了...因为懒,一直没去写...所以今天才把这道题写出来... ...
- EntityFramework 学习 一 Multiple Diagrams in Entity Framework 5.0
Visual Studio 2012 provides a facility to split the design time visual representation of the Entity ...
- 进程【TLCL】
ps命令 ps x 加上 "x" 选项(注意没有开头的 "-" 字符),告诉 ps 命令,展示所有进程,不管它们由什么 终端(如果有的话)控制. 在 TTY 一 ...
- hadoop hdfs java api操作
package com.duking.util; import java.io.IOException; import java.util.Date; import org.apache.hadoop ...
- 初探MyBatis之HelloWorld(三)
三.用SQL映射语句用注解,dataSource用xml(不推荐). 综合上面两节(一个用xml,一个用annotation),发现一个好玩儿的,SQL映射用注解方式,然后还是得有两个xml配置文件. ...
- 结合两张表person和address
Table: Person +-------------+---------+ | Column Name | Type | +-------------+---------+ | PersonId ...
- nyoj-158-省赛来了(组合数)
题目链接 /* Name:nyoj-158-省赛来了 Copyright: Author: Date: 2018/4/25 17:07:22 Description: 暴力,秒天秒地 */ #incl ...