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

kafka 发送消息使用反射调用方法

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

@Component
@Slf4j
public class GreetingsListener {
    @StreamListener(GreetingsStreams.INPUT)
    public void handleGreetings(String params) throws Exception{
        log.info("kafka方法调用: {}", params);
        if (params != null) {
            //获取上下文对象
            ApplicationContext applicationContext = SpringContextUtiles.getApplicationContext();
            Map<String, Object> map = (Map) JSON.parse(params);
            String className = map.get("class").toString();
            //获取bean对象
            Object argObject = applicationContext.getBean(className);
            //获取对象的class
            Class<?> c =  Class.forName(className);
            //获取方法
            String method = map.get("method").toString();
            //获取参数和参数类型
            List<Map<String,Object>> paramsList = (List<Map<String,Object>>) map.get("params");
            //判断是否有参数
            if(paramsList==null || paramsList.size()<=0){
                ReflectionUtils.findMethod(c, method).invoke(argObject);
            }else{
                //参数
                Object argsParam[]=new Object[paramsList.size()];
                //参数类型
                Class[] argsClass = new Class[paramsList.size()];
                for (int i=0;i<paramsList.size();i++){
                    argsClass[i] =  Class.forName(paramsList.get(i).get("type").toString()).getClass();
                    argsParam[i] = paramsList.get(i).get("param");
                }
                ReflectionUtils.findMethod(c, method, argsClass).invoke(argObject,argsParam);
            }
            log.info("success: {}", params);
        }
    }
}

转载于:https://my.oschina.net/youkun/blog/1828965

相关文章:

  • kubernetes基础概念(第二节)
  • postMan测试https接口
  • 深入理解javascript系列(七):闭包(1)
  • Spring cloud 安全部署与性能优化
  • GEF入门实例_总结_06_为编辑器添加内容
  • CIKERS Shane 20190605
  • py 6.13
  • Amazon推新送货无人机Prime Air
  • vue-music 关于playlist (底部播放列表组件)
  • 爬虫基础 2.4 会话和cookie
  • Spring boot的简单rest服务(非xml方式配置)
  • Servlet
  • Confluence 6 配置自动备份
  • 微软云端套用新模型增加精准度 减少预测模型误差
  • 【多线程系列】AQS CAS简单介绍
  • es6(二):字符串的扩展
  • express + mock 让前后台并行开发
  • hadoop集群管理系统搭建规划说明
  • HTML5新特性总结
  • Linux各目录及每个目录的详细介绍
  • Markdown 语法简单说明
  • mysql外键的使用
  • Promise初体验
  • Vue小说阅读器(仿追书神器)
  • 编写符合Python风格的对象
  • 从零开始学习部署
  • 聚类分析——Kmeans
  • 理解在java “”i=i++;”所发生的事情
  • 每天一个设计模式之命令模式
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​香农与信息论三大定律
  • # 飞书APP集成平台-数字化落地
  • #DBA杂记1
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • ${ }的特别功能
  • (2.2w字)前端单元测试之Jest详解篇
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (Java)【深基9.例1】选举学生会
  • (搬运以学习)flask 上下文的实现
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (二)fiber的基本认识
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (九)c52学习之旅-定时器
  • (正则)提取页面里的img标签
  • (转) ns2/nam与nam实现相关的文件
  • *p++,*(p++),*++p,(*p)++区别?
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET MVC之AOP
  • .NET 的程序集加载上下文
  • .net 无限分类
  • .NET6 开发一个检查某些状态持续多长时间的类