通过获取的构造创建对象
步骤:
1.获得Class对象
2.获得构造
3.通过构造对象获得实例化对象
通过反射获取构造方法并使用
Constructor<?>[] getConstructors() 获取所有public修饰的构造方法
Constructor<T> getConstructor(Class<?>... parameterTypes) (有参)
T newInstance() (无参)
Constructor:
T newInstance(Object... initargs)
通过反射获取成员变量并使用
Field[] getFields() :获取公共的 成员变量
Field getField(String name) :根据字段名称获取公共的字段对象
Field[] getDeclaredFields() :获取所有的 成员变量
f.setAccessible(true);//设置反射时取消Java的访问检查,暴力访问
Field getDeclaredField(String name) 暴力反射获取指定名称字段
Field:
Object get(Object obj) 通过对象获取成员变量的值
void set(Object obj, Object value) 通过成员变量对象,修改指定对为指定的值
反射public方法执行流程
1.?获取学生类字节码对象
2.?反射手段创建学生对象
3.?调用getMethod方法获取Method对象, 方法形参接受方法的名字
4.?调用Method方法中的invoke()将方法运行
通过反射获取成员方法并使用
* Method getMethod(String name, Class<?>... parameterTypes)
Method getDeclaredMethod(String name, Class<?>... parameterTypes)
* Method:
* Object invoke(Object obj, Object... args)
BeanUtils:Apache commons提供的一个组件,主要功能就是为了简化JavaBean封装数据的操作
static void setProperty(Object bean, String name, Object value) :给JavaBean对象的成员变量进行赋值
static String getProperty(Object bean, String name)
static void populate(Object bean, Map properties)
注意:BeanUtils的setProperty和getProperty方法底层并不是直接操作成员变量,而是操作和成员变量名有关的get和set方法
自定义BeanUtils工具类:
public static void setProperty(Object bean,String name,Object value)
// 设置任意对象的, 任意属性, 为任意的值
//根据JavaBean对象获取对应的字节码对象
Class clazz = bean.getClass();
//根据字节码对象获取对应的Field对象
Field f = clazz.getDeclaredField(name);
//设置权限,让虚拟机不进行访问的检查
f.setAccessible(true);
//赋值
f.set(bean, value);
public static String getProperty(Object bean,String name)
// 获取任意对象的任意属性
public static void populate(Object bean,Map map)
// 修改任意对象中的属性, 为传入Map集合中的键和值
|
|