反射学习2-通过反射机制动态获取属性的值模拟Struts的自动赋值
一、准备知识:
Java反射机制
处理事务的JavaBean
String的操作常用方法
二、模拟步骤
这里我们通过反射机制动态获取属性的值模拟Struts中的自动赋值。
1、首先创建一个简单的User类包含两个属性username和userid以及getter、setter方法:
class User {
public
User(){}
private
String username;
private
String userid;
public
String getUserid() {
return userid;
}
public void
setUserid(String userid) {
this.userid = userid;
}
public
String getUsername() {
return username;
}
public void
setUsername(String username) {
this.username = username;
}
}
2、接下来创建User类的对象user1,然后通过反射机制动态把user1对象的所有属性赋值给新建的user2:
//创建user1对象
User user1 = new User();
user1.setUsername("arthinking");
user1.setUserid("001");
String username = "arthinking";
String userid = "001";
//通过user1对象获取Class
Class<?> classType =
user1.getClass();
//生成user2对象
Object user2 = classType.getConstructor(new
Class[]{}).newInstance(new Object[]{});
//从user1对应的Class对象中获取所有的属性
Field[] fields = classType.getDeclaredFields();
for(int i=0; i<fields.length; i++){
Field field
= fields[i];
//动态生成getter和setter方法
String
fieldName = field.getName();
String
firstChar = fieldName.substring(0,1).toUpperCase();
String
getterName = "get" + firstChar + fieldName.substring(1);
String
setterName = "set" + firstChar + fieldName.substring(1);
Method
getter = classType.getMethod(getterName);
Method
setter = classType.getMethod(setterName, new
Class[]{field.getType()});
//执行getter方法获取当前域的值
Object
result = getter.invoke(user1);
//执行setter给user2赋值
setter.invoke(user2, new Object[]{result});
}
反射学习2-通过反射机制动态获取属性的值模拟Struts的自动赋值的更多相关文章
- activiti学习6:启动流程后动态获取流程图
目录 activiti学习6:启动流程后动态获取流程图 一.绘图原理 二.根据流程定义id绘图 三.根据流程实例id绘图 3.1 基本原理 3.2 当前节点的获取 3.3 走过的节点的获取 3.4 绘 ...
- jquery 获取属性的值
jquery中用attr()方法来获取和设置元素属性,attr是attribute(属性)的缩写,在jQuery DOM操作中会经常用到attr(),attr()有4个表达式. 1. attr( 属 ...
- 反射学习1、反射机制的介绍和基本的API的使用
关于动态语言: 一般而言,开发者社群说到动态语言,大致认同的一个定义是:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”.从这个观点看,Perl,Python,Ruby是动态语言,C+ ...
- KTHREAD 线程调度 SDT TEB SEH shellcode中DLL模块机制动态获取 《寒江独钓》内核学习笔记(5)
目录 . 相关阅读材料 . <加密与解密3> . [经典文章翻译]A_Crash_Course_on_the_Depths_of_Win32_Structured_Exception_Ha ...
- Java使用反射通过对象属性获取属性的值
代码: // 通过属性获取传入对象的指定属性的值 public String getValueByPropName(Student student, String propName) { String ...
- html/css/js-如何利用jq来更改属性的值和获取属性的值
jquery的使用在web开发中是非常广泛的,虽然说比较容易,易学,但在开发过程中,也总是会碰到各种各样的小问题. 我曾经就遇到这种问题,jq如何获取属性值和更改属性值的. 众所周知,attr()可以 ...
- struts2视频学习笔记 07-08(为Action的属性注入值,指定需要Struts 2处理的请求后缀,常用常量)
课时7 为Action的属性注入值(增加灵活性,适用于经常更改的参数) Struts2为Action中的属性提供了依赖注入功能,在struts2的配置文件中,我们可以很方便地为Action中的属性注入 ...
- 后台拼接input 后,动态获取input的值
//前台 <input id=" /> //后台 string text = request.form["text"].toString();
- 疯狂java学习笔记之面向对象(三) - 方法所属性和值传递
方法的所属性: 从语法的角度来看:方法必须定义在类中 方法要么属于类本身(static修饰),要么属于实例 -- 到底是属于类还是属于对象? 有无static修饰 调用方法时:必须有主调对象(主语,调 ...
随机推荐
- PTCRS 目前投资最成功的的PTC站点
PTCRS算是我投资的比较成功的一个PTC网站,因此首先和大家介绍一下,因为PTC最开始的几个月盈利空间非常大,即使这样,在这20多天里面站长也已经稍微调低了盈利水平. 目前基本上Golden会员租赁 ...
- 深入C(关键字)
C语言标准定义的32个关键字 关键字 意 义 auto 声明自动变量,缺省时编译器一般默认为auto int 声明整型变量 double 声明双精度变量 long 声明长整型变量 char 声明字符型 ...
- 重写alert方法完成类似gmail的友好提示
当在网页中调用aelrt()方法的时候,系统会自动显示友好的提示方式 . 下面是css样式控制代码: /*----------------------------------------------- ...
- 配置Yum源repo文件及搭建本地Yum服务器
分享一篇配置Yum源repo文件及搭建本地Yum服务器的方法,希望对大家有用. Yum源的话有三大类: Base Extra Epel Base:就是你下载的光盘镜像里面的DVD1Extra:就是你下 ...
- reconstruct-original-digits-from-english(好)
https://leetcode.com/problems/reconstruct-original-digits-from-english/ //https://discuss.leetcode.c ...
- 流畅的python第十四章可迭代的对象,迭代器和生成器学习记录
在python中,所有集合都可以迭代,在python语言内部,迭代器用于支持 for循环 构建和扩展集合类型 逐行遍历文本文件 列表推导,字典推导和集合推导 元组拆包 调用函数时,使用*拆包实参 本章 ...
- "com.android.ide.s.ProcessException:Process 'cand 'C:\Program Files\Java\jdk1.8.0_60\bin\java.exe'' finished with non-zero exit value 2"
使用Android Studio 出现该问题: "com.android.ide.common.process.ProcessException: org.gradle.process.in ...
- MongoDB的连接字符串
本文导读:MongoDB数据库与传统的关系型数据库相比,它具有操作简单.完全免费.源码公开等特点,这使MongoDB产品广泛应用于各种大型门户网站和专业网站.由于MongoDB连接并不支持HTTP协议 ...
- VP9 Video Codec
http://www.webmproject.org/vp9/ WebM Repositories libvpx: VP8/VP9 Codec SDK pull http://git.chromi ...
- java调用机器上的shell脚本
java调用机器上的shell脚本,可以这样方便的通过shell脚本调用本机的C.C++等程序 Process process = null; Runtime runTime = Runtime.ge ...