当前位置:网站首页>通过反射执行任意类的任意方法
通过反射执行任意类的任意方法
2022-07-02 09:43:00 【牧歌ing】
通过反射执行任意类的任意方法
Java的反射机制:在程序运行的时候可以调用
Class aClass = Class.forName(className);
Object obj = aClass.newInstance();等反射的API获取任何类的内部信息(字段、方法等),并且能操作这些内部信息
我们在调用Class.forName(className)的时候,会在堆中加载一个Class类型的对象,这个对象就是传入的className,也就是说我们可以通过这个Class类型的对象操作className的方法、属性等。
1、项目结构
2、用来演示的两个类
package com.zhou.reflect.pet;
/** * @author DELL * @version 1.0 * @Description * @date 2022/5/24 16:58 */
public class Cat {
public void sound(){
System.out.println("喵喵喵...");
}
}
package com.zhou.reflect.pet;
/** * @author DELL * @version 1.0 * @Description * @date 2022/5/24 16:54 */
public class Dog {
public void sound(){
System.out.println("汪汪汪...");
}
}
3、properties
# 这里配置需要调用的类路径
className=com.zhou.reflect.pet.Cat
# 需要调用的方法
methodName=sound
4、主要实现
package com.zhou.reflect;
import org.apache.logging.log4j.util.PropertiesUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PropertiesLoaderUtils;
import java.lang.reflect.Method;
import java.util.Properties;
/** * @author DELL * @version 1.0 * @Description * @date 2022/5/24 17:05 */
public class ReflectFactory {
public static void main(String[] args) {
/* * 需求:不修改这个类的代码,自动调用任意类的任意方法 * */
try {
//1、得到resource目录下的properties
ClassPathResource classPathResource = new ClassPathResource("/application.properties");
Properties properties = PropertiesLoaderUtils.loadProperties(classPathResource);
//2、获取配置文件的内容
String className = properties.getProperty("className");
String methodName = properties.getProperty("methodName");
//3、得到类的对象
Class aClass = Class.forName(className);
//4、初始化这个对象
Object obj = aClass.newInstance();
//5、得到类的方法
Method method = aClass.getMethod(methodName);
//6、执行这个方法
method.invoke(obj);
} catch (Exception ex) {
System.out.println(ex);
}
}
}
5、执行结果
配置文件中配置的调用Cat的sound方法,输出结果是“喵喵喵…”
配置文件中配置的调用dog的sound方法,输出结果是“汪汪汪…”
边栏推荐
- Deep copy event bus
- [ybtoj advanced training guidance] cross the river [BFS]
- PR 2021 quick start tutorial, learn about the and functions of the timeline panel
- CDA data analysis -- common knowledge points induction of Excel data processing
- Go learning notes - multithreading
- Record the range of data that MySQL update will lock
- Docker compose configuration mysql, redis, mongodb
- Redis avalanche, penetration, breakdown
- 排序---
- The differences and relationships among port, targetport, nodeport and containerport in kubenetes
猜你喜欢
Docker-compose配置Mysql,Redis,MongoDB
线性DP AcWing 896. 最长上升子序列 II
Is the neural network (pinn) with embedded physical knowledge a pit?
[ybtoj advanced training guide] similar string [string] [simulation]
"As a junior college student, I found out how difficult it is to counter attack after graduation."
This "little routine" is set on the dough cake of instant noodles. No wonder programmers are always hungry
包管理工具
Sort---
深拷贝 事件总线
Why do programmers have the idea that code can run without moving? Is it poisonous? Or what?
随机推荐
js 迭代器 生成器 异步代码处理 promise+生成器 -> await/async
趣味 面试题
[old horse of industrial control] detailed explanation of Siemens PLC TCP protocol
Input a three digit number and output its single digit, ten digit and hundred digit.
2.6 using recursion and stack - [tower of Hanoi problem]
线性DP AcWing 896. 最长上升子序列 II
Use sqoop to export ads layer data to MySQL
使用Sqoop把ADS层数据导出到MySQL
怎样写一篇赏心悦目的英文数学论文
Initial JDBC programming
Deep Copy Event bus
AAAI 2022 | Peking University & Ali Dharma Institute: pruning and compression of pre training language model based on comparative learning
Lekao: 22 year first-class fire engineer "technical practice" knowledge points
Distributed machine learning framework and high-dimensional real-time recommendation system
This "little routine" is set on the dough cake of instant noodles. No wonder programmers are always hungry
The programmer and the female nurse went on a blind date and spent 360. He packed leftovers and was stunned when he received wechat at night
排序---
Lekao.com: experience sharing of junior economists and previous candidates in customs clearance
What data types does redis have and their application scenarios
kubenetes中port、targetPort、nodePort、containerPort的区别与联系