反射学习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修饰 调用方法时:必须有主调对象(主语,调 ...
随机推荐
- 【java】代码优化点
1.对数据库数据的计数统计,尽量在数据库查询时候就使用count()进行统计,避免返回List到项目中统计List大小 2.对于数据库中表中字段数据过长,例如存储的是text类型而不是verchar类 ...
- 【JSP JSTL】<c:if>多个判断条件 + <c:foreach>满足条件跳出循环
有一个需求,将所拥有的权限存放于session中,现在JSP页面判断这些如果在所有权限中有某一个或者某几个,就显示相对应的页面内容 举一个例子,实现以上的逻辑,<c:if>多个判断条件 + ...
- express.Router创建模块化路由
使用 app.route() 创建路由路径的链式路由句柄.由于路径在一个地方指定,这样做有助于创建模块化的路由,而且减少了代码冗余和拼写错误. 先放小实例: app.js var express = ...
- jQuery中,选择器既匹配开头又匹配结尾
jQuery中,选择器既匹配开头又匹配结尾的方法: [attr^=val]attr$=val [attr^=val][attr$=val]
- ylbtech-LanguageSamples-Delegates(委托)
ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-Delegates(委托) 1.A,示例(Sample) 返回顶部 “委托”示例 本示例 ...
- Win32 API UART编程
下面是一个使用Win32 API进行UART编程的简单示例. #include <windows.h> #include <stdio.h> int WINAPI WinMai ...
- delphi 调用 java
1.设置JVM路径 FJavaVM := TJavaVM.Create(JNI_VERSION_1_6, 'C:\Program Files\Java\jre6\bin\server\jvm. ...
- linux ubuntu下abaqus-6.14安装破解完全指南
本人亲测可用 目录 安装前准备 安装过程 机器配置 腾讯云服务器 ubuntu server 16.10 1.首先要在服务器上安装gui及相关依赖 sudo apt-get install ubunt ...
- ExportAsFixedFormat Visio文件另存为其他几种格式的处理
Visio文件另存为其他几种格式的处理,以及另存为Web文件等相关操作. 1.Visio导出为PDF格式 在一般情况下,PDF格式是较为常用的内容格式,因此Visio文档(Vsd格式)导出为PDF也是 ...
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何修改某个轴的数值单位
在某个轴上双击,切换到Settings,然后可以再Unit中修改为角度,弧度,mm 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/aceta ...