我们经常使用COMMONS-BEANUTILS包来进行bean的操作,例如从map到bean获从bean到map的映射,那么实现的原理是什么呢,下面举个简单的操作的例子;首先,我建立一个bean
public class Bean {
private String test1;

private String getTest1() {
return test1;
}

private void setTest1(String test1) {
this.test1 = test1;
}
}

上面这个例子比较极端,利用我们平常的JAVA操作是不可能通过这两个私有方法进行设置和获取值的,但是我们利用JAVA反射机制却可以非常方便的操作。
下面,我将全部利用JAVA的反射来进行对象的创建,以及对它的操作;这里我们假设这个Bean我们只能得到名称,例如,我们是从配置文件中得到的名称,公司的COMMAND框架中receiver的配置就是如此,配置了receiver的名称和要执行的方法,我们无论他是否是私有的还是共有的都可以访问。
public class TestClass {

/**
* @param args
* @throws ClassNotFoundException
* @throws NoSuchMethodException
* @throws SecurityException
* @throws InvocationTargetException
* @throws IllegalAccessException
* @throws IllegalArgumentException
* @throws InstantiationException
*/
public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException {
//1.0得到bean的Class对象
Class beanClass=Class.forName("org.test.t.Bean");
//2.0利用构造函数构造一个Bean对象
Constructor bc=beanClass.getConstructor(null);
Bean b=(Bean) bc.newInstance(null);
/**
* 也可以这样构造
* Bean b=Class.forName("org.test.t.Bean").newInstance();
*/

//3.0通过getDeclaredMethod方法得到要执行的方法(public/protected/private/默认),要执行的方法的函数名字是第一个参数指定,第二个参数指定该函数带有的参数
//如果只需要得到公共成员方法,则直接调用getMethod方法
Method setMethod=beanClass.getDeclaredMethod("setTest1", new Class[]{String.class});
Method getMethod=beanClass.getDeclaredMethod("getTest1", null);
//4.0 如果要访问私有的方法,所以我们在这里将可访问设置为true,则JVM不会执行访问控制检查;如果是共有方法则不需要设置
setMethod.setAccessible(true);
//5.0用得到的方法对象在第2步中构造的对象中执行
setMethod.invoke(b, new Object[]{"hello"});
System.out.println(getMethod.isAccessible());
getMethod.setAccessible(true);
System.out.println(getMethod.isAccessible());
System.out.println(getMethod.invoke(b, null));

}

}
上面红色部分是获取所有public/private/protected/默认 方法的函数,如果只需要获取public方法,则可以调用getMethod.

上面粉红色的方法是将要执行的方法对象设置是否进行访问检查,也就是说对于public/private/protected/默认 我们是否能够访问。值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查。
如果是共有方法,当然不需要设置。

利用java反射机制进行对象操作相关推荐

  1. java 对象复制 反射_利用Java反射机制实现对象相同字段的复制操作

    一.如何实现不同类型对象之间的复制问题? 1.为什么会有这个问题? 近来在进行一个项目开发的时候,为了隐藏后端数据库表结构.同时也为了配合给前端一个更友好的API接口文档(swagger API文档) ...

  2. java 对象复制字段_利用Java反射机制实现对象相同字段的复制

    一.如何实现不同类型对象之间的复制问题? 1.为什么会有这个问题? 近来在进行一个项目开发的时候,为了隐藏后端数据库表结构.同时也为了配合给前端一个更友好的API接口文档(swagger API文档) ...

  3. 利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换

    作者:54dabang 在spring的学习过程之中,我们能够看出通过配置文件来动态管理bean对象的优点(松耦合 能够让零散部分组成一个总体,而这些总体并不在意之间彼此的细节,从而达到了真正的物理上 ...

  4. 利用Java反射机制降低代码圈复杂度

    利用Java反射机制降低代码圈复杂度 在实际的工作中,我遇到了项目里老代码存在圈复杂度过高的问题,在提交代码的时候通不过CI(代码检查)的Lizard复杂度检查,所以迫切需要解决这个问题,运用Java ...

  5. 利用java反射机制修改属性值

    利用java反射机制修改属性值 本文将介绍如何利用java反射机制修改属性值,废话不多说,直接上代码 1.新建一个实体类,添加属性test以及获取属性值的方法getTest() public clas ...

  6. java invoke 泛型_利用Java反射机制和泛型,全自动解析json

    有啦这个简直,太爽啦, 利用Java 反射机制,利用Class 就可以得到 类的 变量  Field[] fields=cls.getDeclaredFields(); 还可以通过类中 的方法名字 去 ...

  7. 利用Java反射机制调用含数组参数的方法

    http://yourmitra.wordpress.com/2008/09/26/using-java-reflection-to-invoke-a-method-with-array-parame ...

  8. 利用Java反射机制调用类的私有方法

    利用Java反射机制调用类的私有方法 引言 来吧·展示 参考链接 引言 如何调用其他类的私有方法呢? 可以利用Java的反射机制,去调用其他类的私有方法 来吧·展示 package cn.learn. ...

  9. 转换实体类_利用Java反射机制进行Map和JavaBean间转换

    Java中利用反射进行Map和JavaBean间转换 在日常工作中,有时候我们可能会遇到以下这样的情况发生. 例如: (1)后端接受一个参数Map param(可能是前端form维护的一个对象...) ...

最新文章

  1. excel公式 某一个单元格等于另一个单元格的值_EXCEL函数学习5——COUNTIF函数
  2. 安卓应用安全指南 4.10 使用通知
  3. 3D游戏建模快速制作枪械的几种方法【3Dmax,Zbrush,Maya】
  4. Arduino库 <TFT_eSPI> 中文字库的制作与使用
  5. Cypher语句-Create语句
  6. libtorrent java_[libtorrent] windows搭建 libtorrent 开发环境
  7. 幂函数 、 指数 、 对数 、底数
  8. 计算机视觉入门知识一:数据分类基础 (李飞飞斯坦福计算机视觉课程)
  9. 【AI简报20220311期】汽车AI芯片竞赛加速、苹果最强芯M1 Ultra登场
  10. 智能家居网络安全攻与防
  11. 生成EXCEL(不使用模板)
  12. c语言数据结构之队列
  13. 【Matlab】开发环境介绍及学习方法
  14. 基于内容的推荐算法(Content-Based)
  15. “数智化”技术全面提速新基建,巩固智慧变电站“防汛墙”
  16. iptables tc限速笔记
  17. 国王之死---怀念迈克尔.杰克逊
  18. 怎样将计算机和电视机连接网络,电脑如何连电视机连接 电脑连接电视机步骤【详解】...
  19. 将网页上所有canvas下载为图片
  20. 朝花惜时不更了?还有没有好看的漫画推荐呢?

热门文章

  1. 批量mergeinto
  2. golang sftp传输文件
  3. mysql索引总结----mysql 索引类型以及创建
  4. Axure7.0 以及 中文汉化语言包下载 axure汉化包
  5. 在Django项目中使用富文本编辑器
  6. Struts2动态方法调用
  7. jboss5 启动时报HsqlException:length must be specified in type definition:VARBINARY错误
  8. 使用Keil MDK以及标准外设库创建STM32工程
  9. ISA Server 2004 中的导出、导入和备份功能
  10. 关于自定义控件设计时如何把属性写入aspx中的研究(上)