Java基础笔记 - 通过反射机制动态获取属性的值模拟Struts的自动赋值

发布于 2011-10-07 | 更新于 2020-09-20

准备知识:

Java反射机制 处理事务的JavaBean String的操作常用方法

这里我们通过反射机制动态获取属性的值模拟Struts中的自动赋值。

首先创建一个简单的User类包含两个属性username和userid以及getter、setter方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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;
}
}

接下来创建User类的对象user1,然后通过反射机制动态把user1对象的所有属性赋值给新建的user2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//创建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});
}

本文作者: arthinking

本文链接: https://www.itzhai.comjava-based-notes-through-reflection-to-get-property-value-dynamically-simulate-the-automatic-assignment-struts.html

版权声明: 版权归作者所有,未经许可不得转载,侵权必究!联系作者请加公众号。

×
IT宅

关注公众号及时获取网站内容更新。