反射学习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修饰 调用方法时:必须有主调对象(主语,调 ...
随机推荐
- JavaScript基础入门教程(一)
本系列教程的说明 本教程说白了可以说是我自己学习JavaScript的笔记,主要内容参考自<JavaScript权威指南>,部分内容可能来自互联网,本系列教程假设学者之前学过c或者其它的编 ...
- 解决kylin报错:java.lang.IllegalStateException
一个kylin build job执行到第三步Extract Fact Table Distinct Columns时报错: 2017-05-24 20:04:07,930 ERROR [pool-9 ...
- postgres--流复制
配置 master 192.168.2.21 5432 slave 192.168.2.22 5432 目录 /var/lib/pgsql/10/data/ 配置主库 配置用户 psql create ...
- latex不能识别eps图片
latex中可以使用.eps的图片,许多文档都介绍了怎么引用这种格式的图片,但没有给出使用过程中的注意事项.我在使用MIKTEX的时候,latex文档中引入.eps图片遇到了这样的问题.编译的时候显示 ...
- java中jar命令打包一个文件夹下的所有文件
(1)首先,必须保证java的所有路径都设置好,在dos提示符下输入jar -help出现C:\Documents and Settings\dly>jar -help非法选项:h用法:jar ...
- FreeMarker最简单的例子(2)
二.通过String来创建模版对象,并执行插值处理 代码: package com.abc; import freemarker.template.Template; import java.io.O ...
- Razor语法(四)
1. @代表开始一个Razor代码块,Razor会自动匹配代码中的花括号,比如@if(p.Active){<li>@p.Name</li>} 2. @{code}标识一个Raz ...
- [CSS3] Make a One-time CSS Animation that Does Not Revert to its Original Style
We'll add animation to patio11bot using CSS keyframes. When defining a CSS animation, you can add it ...
- Silverlight 安装失败 提示 消息 ID 1603 的解决方法
消息 ID: 1603 安装过程中出现错误.请执行以下步骤 原因是在以前安装过silverlight,没有安装成功或者没有彻底卸载干净,遗留了一些文件,尤其是安装时突然中断的时候会出现这个问题. 解决 ...
- 近期写的一个控件——Well Swipe beta 1.0
原文地址:http://blog.csdn.net/u013045971/article/details/51119507 近期花了大概一个半月的业余时间写的.从没有到有,中间也碰到了非常多的坑,一点 ...