当前位置:网站首页>通过反射执行任意类的任意方法
通过反射执行任意类的任意方法
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方法,输出结果是“汪汪汪…”
边栏推荐
- Simple use of drools decision table
- 分布式机器学习框架与高维实时推荐系统
- Input a three digit number and output its single digit, ten digit and hundred digit.
- Error in kubeadm join: [error port-10250]: port 10250 is in use [error fileavailable--etc kubernetes PKI
- 甜心教主:王心凌
- BOM DOM
- Input box assembly of the shutter package
- arcgis js 4.x 地图中加入图片
- Mysql database foundation
- Deep Copy Event bus
猜你喜欢

AAAI 2022 | Peking University & Ali Dharma Institute: pruning and compression of pre training language model based on comparative learning

Win10 system OmniPeek wireless packet capturing network card driver failed to install due to digital signature problem solution

染色法判定二分图 AcWing 860. 染色法判定二分图

The differences and relationships among port, targetport, nodeport and containerport in kubenetes

Tas (file d'attente prioritaire)

kubenetes中port、targetPort、nodePort、containerPort的区别与联系

堆(優先級隊列)

VLAN experiment

mysql数据库基础

线性DP AcWing 898. 数字三角形
随机推荐
浏览器存储方案
BOM DOM
drools动态增加、修改、删除规则
MySQL与PostgreSQL抓取慢sql的方法
Why do programmers have the idea that code can run without moving? Is it poisonous? Or what?
Simple use of drools decision table
Leetcode14 longest public prefix
High performance erasure code coding
Multiply LCA (nearest common ancestor)
Shutter encapsulated button
Brush questions --- binary tree --2
趣味 面试题
Rust search server, rust quick service finding tutorial
AI mid stage technology research
Docker-compose配置Mysql,Redis,MongoDB
drools执行完某个规则后终止别的规则执行
Sse/avx instruction set and API of SIMD
Map和Set
[ybtoj advanced training guidance] cross the river [BFS]
Deep copy event bus