Java反射可以在运行时动态的获取某个类的信息,并且可以调用里面的方法,反射技术在很多框架里经常被应用。
1.通过反射调用构造方法
public static void getInstance(String name) throws Exception {
Class clz = Class.forName(name);
Person p1 = (Person)clz.newInstance();//无参构造函数
System.out.println("Person age == " + p1.getAge() + ", name == " + p1.getName());
Constructor con = clz.getConstructor(int.class, String.class);//带参构造函数 参数类型
Person p2 = (Person) con.newInstance(1, "1");////带参构造函数 参数值
System.out.println("Person age == " + p2.getAge() + ", name == " + p2.getName());
}
可以看到打印出Person的值
===================================
Person age == 0, name == null
Person age == 1, name == 1
===================================
2.通过反射调用方法
现在有一个JavaBean Person
public class Person {
private String sex;
private String name;
private String dep;
private String address;
private String id;
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDep() {
return dep;
}
public void setDep(String dep) {
this.dep = dep;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
现在要通过反射动态的给每个属性赋值,并且取值。加入两个方法分别给属性赋值并且取值
/**
*
* @Title: setProp
* @Description: TODO(给属性赋值)
* @param @param prop 属性名
* @param @param value 属性值
* @return void 返回类型
* @throws
*/
private static void setProp(String prop, String value) throws Exception {
Method method = clz.getDeclaredMethod("set" + value, String.class);//方法名,参数类型
method.invoke(p, value);//所调用的对象, 参数值
}
/**
*
* @Title: getProp
* @Description: TODO(取属性的值)
* @param @param prop 属性名
* @return Object 所调用方法的返回值
* @throws
*/
private static Object getProp(String prop) throws Exception {
Method method = clz.getDeclaredMethod("get" + prop);//方法名
Object rvalue = method.invoke(p);//所调用的对象
return rvalue;
}
分别调用Person里面的setXXX和getXXX方法
static Class clz;
static Person p;
public static void main(String[] args) throws Exception {
String[] prop = {"Sex", "Name", "Dep", "Address", "Id"};
clz = Person.class;
p = (Person) clz.newInstance();
for (int i = 0; i < prop.length; i++) {
setProp(prop[i], prop[i]);
Object obj = getProp(prop[i]);
System.out.println(prop[i] + " === " + obj);
}
}
打印出
Sex === Sex
Name === Name
Dep === Dep
Address === Address
Id === Id
3.读取配置文件
有的时候我们需要把一些配置写到配置文件里面,比如ip,host。这样当环境改变的时候我们可以不用改变源码直接改配置文件就可以修改配置。
写好一个配置文件
domain=http://172.16.1.185:9001/
把这个文件放到工程的classpath目录下面
现在要读取这个配置文件,可以通过获取ClassLoader获取classpath下的config.properties
Properties props = new Properties();
//读取FileStore.properties配置文件
props.load(PropTest.class.getClassLoader().getResourceAsStream("config.properties"));
String filePath = props.getProperty("domain");
分享到:
相关推荐
代码主要实现了Java反射应用实例, 包含利用反射方法创建对象(使用默认构造函数和自定义构造函数),访问对应对象的方法(包括带参数的和不带参数的),访问对应对象的域(Field). 从这里可以看到代码的详细解说:...
在标题“Java反射应用实例”中,我们关注的是如何在实际项目中利用反射来实现特定的功能。这篇博客文章(可以通过链接访问)可能会探讨以下几个方面: 1. **什么是反射**:首先,我们需要理解反射的基本概念。反射...
在向学生讲解Class.forName()方法的使用时,有时需要扩展讲解为什么这样书写的原理,于是,扩展讲解Java反射技术可以查看被监视类的方法(构造方法和普通方法)、公有属性的功能,以达到封闭功能的效果。该例子使用...
在深入理解Java反射的应用之前,我们首先需要知道什么是反射以及它的基本概念。 Java反射机制的核心在于`java.lang.Class`类,每个类在内存中都有一个对应的Class对象,它包含了该类的所有信息。通过`Class.forName...
这篇博文主要探讨了如何在实际开发中应用Java反射,以增强代码的灵活性和动态性。 一、Java反射的基础概念 1. 类加载器(ClassLoader):负责将.class文件加载到JVM中,转换为Class对象。 2. Class对象:代表运行时...
几个小demo,介绍了反射的几个api操作,最后写了一个简单的Java反射应用:工厂+反射+配置文件。
JAVA反射机制应用 JAVA反射机制是JAVA语言中的一种动态机制,它能够在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法。这种动态获取的信息以及动态...
Java反射机制是Java语言提供的一种强大功能,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类是java.lang.Class,它代表了运行时的类信息。通过Class对象,我们...
Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射机制提供了强大的能力,包括在运行时检查类的结构、创建对象实例、调用方法以及访问和修改字段值。...
### Java反射机制应用详解 #### 一、Java反射机制简介 Java反射机制是Java语言提供的一种能在运行时分析类信息并动态操作对象的功能。通过反射,我们可以在程序运行期间获取类的信息(如类名、方法名等),创建...
JAVA反射机制及应用例子.。。Reflection API
本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解。 下面开始正文。 【案例1】通过一个对象...
### Java反射性能测试分析 #### 引言 Java反射机制是Java编程语言中一个强大的特性,它允许程序在运行时动态地访问、检测和修改类、接口、字段和方法等对象。然而,反射操作通常会引入额外的开销,这在性能敏感的...
- **运行时装配**:Java反射允许程序在运行时动态地加载类和创建对象,这对于构建可扩展的应用程序非常有用。 - **元数据查询**:开发人员可以利用反射来查询类的元数据,如字段名、方法签名等。 - **动态调用方法**...
通过本文,我们将深入探讨Java反射机制的核心概念、基本原理及其应用场景。 #### 二、Java反射机制简介 Java反射机制允许程序在运行时获取类的信息,这使得Java具有了一定程度上的动态性。具体来说,Java反射机制...
Java反射广泛应用于框架开发、动态代理、测试工具等领域。例如,在Spring框架中,反射被用来动态创建对象和调用方法;在Hibernate等ORM框架中,反射用于处理数据库记录与Java对象之间的映射关系。 #### 三、反射...
Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...
本实例将深入探讨Java反射的应用及其重要性。 一、什么是Java反射 Java反射机制允许我们动态地获取类的信息,并在运行时创建和调用对象的方法。这种能力使得Java具有高度的灵活性和动态性,特别是在处理跨版本兼容...
### Java反射应用案例 1. **动态代理**:Java反射可以用来实现动态代理模式,其中最典型的应用是在JDK动态代理和CGLIB动态代理中。这两种技术都依赖于反射来生成代理类和调用目标方法。 2. **框架中的应用**:许多...