当前位置: 首页 > news >正文

反射在Spring IOC容器中的应用——动态创建Bean (补充)

在上文中,讲述了反射在Spring IOC容器中的应用,即通过获取类的class对象后进行实例化,用实例化对象去操作其中的成员(变量,方法等),今天来补充一下反射实现动态调用

一句话讲,就是:通过获取 Class 对象并实例化,再根据配置文件动态调用方法的过程,就是“动态调用”

还是老样子,举例讲解:

准备方法:

public class TestInvoke {public void sayHello() {System.out.println("欢迎使用!正在执行 sayHello 方法。");}public void sayBye() {System.out.println("再见!正在执行 sayBye 方法。");}public void doWork() {System.out.println("正在处理任务... 执行 doWork 方法。");}
}

配置文件(使用时只会给一个配置取消注释,即激活):

# 场景1:调用 sayHello
className=TestInvoke
methodName=sayHello# 场景2:调用 sayBye
# className=TestInvoke
# methodName=sayBye# 场景3:调用 doWork
# className=TestInvoke
# methodName=doWork

核心执行代码:

public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {// 1. 获取类名并加载 Class 对象Class<?> c = Class.forName(getName("className"));System.out.println("加载的类名:" + c.getSimpleName());// 2. 获取方法名并获取 Method 对象Method method = c.getDeclaredMethod(getName("methodName"));// 3. 绕过访问控制检查(可选)method.setAccessible(true);// 4. 创建实例对象TestInvoke testInvoke = (TestInvoke) c.newInstance();// 5. 调用方法method.invoke(testInvoke);
}

运行实例:

示例1:调用 sayHello()

配置文件内容:

className=TestInvoke
methodName=sayHello

程序输出:

加载的类名:TestInvoke
欢迎使用!正在执行 sayHello 方法。

总结一下:

http://www.lryc.cn/news/621185.html

相关文章:

  • Linux 上手 UDP Socket 程序编写(含完整具体demo)
  • 基于SpringBoot+Vue的房屋匹配系统(WebSocket实时通讯、协同过滤算法、地图API、Echarts图形化分析)
  • css中container和media的用法和区别
  • 【Docker】安装kafka案例
  • BGP笔记及实验
  • Windows 11操作系统 Git命令执行速度慢
  • LLM 中 语音编码与文本embeding的本质区别
  • [论文阅读] 人工智能 + 软件工程 | 从模糊到精准:模块化LLM agents(REQINONE)如何重塑SRS生成
  • OpenCV图像处理2:边界填充与平滑滤波实战
  • 数据结构之顺序表相关算法题
  • latex 中破折号的输入
  • 【PCB设计经验】3D模型在线预览!效率便捷!
  • 【浅学】tflite-micro + ESP32S3 + VScode + ESP-IDF 基于例程快速实现自己的图像分类模型训练部署全流程
  • Python学习-----3.基础语法(2)
  • 异步同步,阻塞非阻塞,reactor/proactor
  • spring boot配置es
  • CPP模板编程
  • Redis7学习--持久化机制 RDB与AOF
  • 汽车生产线白皮书:稳联技术Profinet转Ethernet IP网关通信高效性
  • StarRocks优化统计分析
  • Redis入门到实战教程,深度透析redis
  • 零信任架构(Zero Trust Architecture, ZTA)(通过动态验证和最小权限控制,实现对所有访问请求的严格授权和持续监控)
  • Java应用架构实战指南:主流模式解析与Spring落地实践
  • diffusers库学习--pipeline,模型,调度器的基础使用
  • Docker exec进入容器命令的入门教程
  • 使用正则表达式 \s+ 作为分隔符处理字符串
  • 【cmake】编译cpp文件,安装MinGW
  • Python 进阶详解:正则表达式与 JSON —— 文本处理与数据交换的核心技能
  • K8s-持久化存储
  • 第1节:多模态大模型入门(多模态大模型基础教程)