使用内省的方式操作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目录 ...
随机推荐
- Android内核开发:理解和掌握repo工具【转】
本文转载自:http://ticktick.blog.51cto.com/823160/1653304 由于Android源码是用repo工具来管理的,因此,搞Android内核开发,首先要搞清楚re ...
- SYN blood攻击
SYN Flood (SYN洪水) 是种典型的DoS (Denial of Service,拒绝服务) 攻击.效果就是服务器TCP连接资源耗尽,停止响应正常的TCP连接请求. 说到原理,还得从TCP如 ...
- JAVA学习前十天:小结、面向对象之”扑克牌“例子
2016年4月26号正式步入JAVA学习课堂,学习了第一节JAVA课程,由于以前有C语言基础,所以课程有点快! 第一天:学习了教材的第一部分,第一部分总共两章,分别是JAVA简介和JAVA基础语法. ...
- RowSet
import java.io.FileInputStream; import java.util.Properties; import javax.sql.rowset.JdbcRowSet; imp ...
- BZOJ3669 [Noi2014]魔法森林(SPFA+动态加边)
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- tyvj 1884 [NOIP2000T4]方格取数 || codevs 1043 dp
P1884 [NOIP2000T4]方格取数 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 [noip2000T4]方格取数 描述 设有N*N的方格图(N& ...
- LightOJ 1245 数学
Harmonic Number (II) Description I was trying to solve problem '1234 - Harmonic Number', I wrote the ...
- Spring 入门base
提起Spring,就会想到企业级框架这个词 企业级系统: 1.大规模:用户数量多,数据规模庞大,数据众多 2.性能和安全性要求更高 3.业务复杂 4.灵活应变 我觉得先了解一下Spring的地位和他的 ...
- Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...
- uva10648 概率dp
https://vjudge.net/problem/UVA-10648 将n个不同小球放入m个不同盒子,放入每个盒子的概率相同,问放完之后仍有空盒子的概率: 还是太傻- -,可以倒着计算出放完之后没 ...