您的位置:首页 > 编程语言 > Java开发

反射学习2-通过反射机制动态获取属性的值模拟Struts的自动赋值

2016-02-05 10:38 585 查看
一、准备知识:

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});

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: