反射学习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});
}

时间: 2024-10-14 01:53:55

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

反射 学习笔记(二) 动态获取外部程序集中的类类型及成员类型

之前熟悉了反射相关的基本概念,知道了如何获取Assembly类和Type类,接下来通过一个小程序来练习.体验通过反射动态获取给定的*.dll或*.exe程序集所包含的所有类型的列表(列表包括给定类型定义的方法.字段.属性.事件.支持的接口.方法参数.基类.命名空间等).目标:使用Winform写一个小工具,可以查看指定dll的元数据. 界面如下: 使用的控件包括:按钮.OpenFileDialog对话框.ComboBox(DropDownList类型).TextBox(MultiLine为tru

【Java 反射学习】Java 反射基础

知识点 类是用来描述对象的,而反射就可以理解为是用来描述类的. 类中的属性包括: Class 类本身 Package 类所在的包 Field 类中的属性 Method 类中的方法 Constructor 类中的构造方法 Annotation 类中的注解 如何获取Class 1.Class的静态方法,forName("全类名") 2.类.class关键字 3.对象引用.getClass()方法 Object中的方法 Class中的常用方法 /* 0--默认不写 1--public 2--

jquery 获取属性的值

jquery中用attr()方法来获取和设置元素属性,attr是attribute(属性)的缩写,在jQuery DOM操作中会经常用到attr(),attr()有4个表达式. 1.  attr( 属性名 )        //获取属性的值(取得第一个匹配元素的属性值.通过这个方法可以方便地从第一个匹配元素中获取一个属性的值.如果元素没有相应属性,则返回 undefined ) 2.  attr( 属性名, 属性值 )    //设置属性的值 (为所有匹配的元素设置一个属性值.) 3.  att

反射学习4-通过反射机制动态创建和访问数组

一.前言 java.lang.reflect.Array类提供了动态创建和访问数组元素的各种静态方法. static Object    newInstance(Class<?> componentType, int... dimensions) 创建一个具有指定的组件类型和维度的新数组.componentType:组件类型,Java中将数组的数组也就是二维数组当做一个组件. static Object get(Object array, int index) 返回指定数组对象中索引组件的值.

html/css/js-如何利用jq来更改属性的值和获取属性的值

jquery的使用在web开发中是非常广泛的,虽然说比较容易,易学,但在开发过程中,也总是会碰到各种各样的小问题. 我曾经就遇到这种问题,jq如何获取属性值和更改属性值的. 众所周知,attr()可以更改属性值和获取属性值. 例如 alert($("#one").attr("name")); 这样可以获得id为one的控件的name属性的值,但是 alert($("#one").attr("width"));         

反射学习3-通过反射机制修改类中的私有属性的值

 一.准备知识:    Java反射机制以及域的获取与设置的相关方法  二.实现步骤: 1.首先创建一个类包含一个私有属性: class PrivateField{     private String username = "Jason"; } 2.通过反射机制修改username的值: //创建一个类的对象 PrivateField privateField = new PrivateField(); //获取对象的Class Class<?> classType =

利用反射机制获取属性的值遇到的坑

类: public Class Test { public string name; public string value; } Test t=new Test(); t.name="abc"; t.value="123"; string str=(string)t.GetType().GetProperty("name").GetValue(t,null); 找了3个小时,都找不出问题在哪里,由于这是我自己写的类,所以我就怀疑是不是类有问题,

Cedar老师的java中的反射学习笔记(二)--动态加载

静态加载: 编译时刻加载类 (1)new创建对象是静态加载类,在编译时加载类 动态加载: 运行时刻加载类 (2)Class c=Class.forName() 动态加载类 c.newInstance(); 代码: (1)创建一个office类: class Office { public static void main(String[] args) { Word w=new Word(); w.start(); Excel e=new Excel(); e.start(); } } 编译后报错

反射学习(三)--------利用反射调用方法

利用反射调用方法 C1 newC1Instance = new C1(); var funM = newC1Instance.GetType().GetMethod("fun", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); object[] para = { }; if (funM == null) { Console.Write("error, fu