反射获取java对象的几种方式
作者:Mr.小海
本文详细介绍了如何通过反射在Java中获取Class对象,使用不同构造器创建对象,以及Spring框架中的对象获取方法,包括构造器配置和setter注入,下面就来详细的介绍一下,感兴趣的可以了解一下
获取Class对象
- 已知全限定名
Class clazz = Class.forName("java.util.ArrayList");
- 已知类
Class clazz = String.class;
- 已有对象
String str = "Hello"; Class clazz = str.getClass();
已有Class对象
//1.创建对象
Class clazz = MyClass.class; // 假设 MyClass 是一个类
MyClass obj = (MyClass) clazz.newInstance(); // 创建 MyClass 的实例
//2.调用成员变量
Class clazz = MyClass.class;
Field field = clazz.getDeclaredField("fieldName"); // 获取字段对象
field.setAccessible(true); // 设置可访问私有字段
Object value = field.get(obj); // 获取字段值
field.set(obj, newValue); // 设置字段值
// 获取字段值
Object value = field.get(obj);
System.out.println("原始值:" + value);
// 修改字段值
field.set(obj, newValue);
System.out.println("修改后:" + field.get(obj));
//3.调用方法
Class clazz = MyClass.class;
Method method = clazz.getDeclaredMethod("methodName", argTypes); // 获取方法对象
method.setAccessible(true); // 设置可访问私有方法
Object result = method.invoke(obj, args); // 调用方法并获取返回值
不同的构造器创建对象
Class clazz = MyClass.class;
// 获取无参构造函数,创建实例
MyClass obj1 = (MyClass) clazz.newInstance();
// 获取有参构造函数,创建实例
Constructor constructor = clazz.getDeclaredConstructor(String.class, int.class);
MyClass obj2 = (MyClass) constructor.newInstance("name", 18);
spring获取对象的方式
有以下类:
package com.xiaojiang.Spring;
public class Role {
private int id;
private String roleName;
private String note;
public Role(){}
public Role(int id,String roleName, String note)
{
super();
this.id = id;
this.roleName = roleName;
this.note = note;
} //setter,getter方法省略
}
<!--构造器配置-->
<bean id="Role" class="com.xiaojiang.Spring.Role">
<constructor-arg value="1" type="int"></constructor-arg>
<constructor-arg value="小江" type="java.lang.String"></constructor-arg>
<constructor-arg value="有点丑" type="java.lang.String"></constructor-arg>
</bean><!--配置setter注入-->
<bean id="Role" class="com.xiaojiang.Spring.Role">
<property name="id" value="1"><property>
<property name="roleName" value="小江"><property>
<property name="note" value="测试"><property>
</bean> 基于接口的注入:对象赋值,将value的赋值改成ref赋值
到此这篇关于反射获取java对象的几种方式的文章就介绍到这了,更多相关反射获取java对象内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
